Rumah >hujung hadapan web >tutorial js >Demystifying JavaScript Variable Scope and Hoisting
Memahami skop pembolehubah JavaScript dan angkat: Panduan Komprehensif
Konsep Utama:
var
dan let
). const
Deklarasi var
dan let
dinaikkan ke atas blok mereka tetapi tetap tidak terinkali, mewujudkan "zon mati temporal." const
Skop pembolehubah secara terperinci:
Skop pembolehubah dalam JavaScript ditentukan oleh lokasi pengisytiharannya, menentukan kebolehcapaiannya dalam program. Tiga kaedah wujud untuk pengisytiharan berubah -ubah: Legacy Kata kunci dan kata kunci moden var
dan let
. Walaupun const
adalah pilihan tunggal pra-ES6, var
dan let
menawarkan peraturan yang lebih ketat, meningkatkan kebolehpercayaan kod. const
) dan skop blok (untuk var
dan let
). Skop fungsi adalah bentuk khusus skop blok. const
Skop global:
Skop paling luar dalam skrip adalah skop global. Pembolehubah yang diisytiharkan di sini menjadi global, boleh diakses dari mana saja dalam program:
<code class="language-javascript">// Global Scope const name = "Monique"; function sayHi() { console.log(`Hi ${name}`); } sayHi(); // Hi Monique</code>Walaupun mudah, pembolehubah global umumnya tidak digalakkan kerana potensi konflik dan penindasan.
skop tempatan:
pembolehubah yang diisytiharkan dalam satu blok (mis.,, if
, fungsi) adalah setempat ke blok itu. Fungsi mentakrifkan skop untuk pembolehubah yang diisytiharkan dengan for
, var
, dan let
. Blok kod hanya mentakrifkan skop untuk const
dan let
; const
terhad kepada skop fungsi. var
let
dan const
memperkenalkan skop blok, mewujudkan skop tempatan baru untuk setiap blok. Blok mandiri juga menentukan skop:
<code class="language-javascript">// Global Scope const name = "Monique"; function sayHi() { console.log(`Hi ${name}`); } sayHi(); // Hi Monique</code>
Skop bersarang mungkin, dengan skop dalaman mengakses pembolehubah dari skop luar tetapi tidak sebaliknya.
metafora visual untuk skop:
Bayangkan dunia: negara mempunyai sempadan (skop), bandar -bandar di dalam negara mempunyai skop mereka sendiri, dan sebagainya. Skop global adalah seperti lautan dunia, merangkumi semua. Analogi ini menggambarkan bagaimana skop berfungsi: Mencari pemboleh ubah bermula dalam skop paling dalam dan meneruskan ke luar sehingga dijumpai atau ralat berlaku. Pencarian ini dipanggil leksikal (statik).
Hoisting:
mekanisme "angkat" JavaScript menggerakkan pengisytiharan pembolehubah dan fungsi ke bahagian atas skop mereka semasa penyusunan. Walau bagaimanapun, hanya pengisytiharan yang dinaikkan; Tugasan kekal di tempat. Pertimbangkan ini:
<code class="language-javascript">{ // standalone block scope }</code>
output adalah undefined
kerana state
diisytiharkan tetapi belum diberikan nilai. Enjin menafsirkannya sebagai:
<code class="language-javascript">console.log(state); // undefined var state = "ready";</code>
let
dan const
pembolehubah juga dinaikkan tetapi tidak dimulakan, mengakibatkan "zon mati temporal" (TDZ) sebelum pengisytiharan mereka. Mengaksesnya dalam TDZ melemparkan ReferenceError
.
Fungsi dan angkat:
Pengisytiharan fungsi sepenuhnya dinaikkan, membenarkan panggilan sebelum definisi mereka:
<code class="language-javascript">var state; // hoisted console.log(state); state = "ready";</code>Walau bagaimanapun, ekspresi fungsi, mengikuti peraturan angkat standard (pengisytiharan dinaikkan, tugasan kekal). Kelas berkelakuan sama dengan
pembolehubah. let
Perbezaan utama dan amalan terbaik:
var
let
: blok-scoped. const
Soalan -soalan yang sering ditanya:
let
const
let
dan const
) untuk organisasi kod dan penyelenggaraan yang lebih baik.
Atas ialah kandungan terperinci Demystifying JavaScript Variable Scope and Hoisting. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!