JavaScript Variable Hoisting: Meneroka Nilai Global yang Tidak Ditakrifkan
Artikel ini meneroka kelakuan mengejutkan pembolehubah global dalam JavaScript, terutamanya apabila ia kelihatan mempunyai nilai yang tidak ditentukan dalam fungsi.
The Kes:
Dalam contoh di bawah, nilai pembolehubah global dimulakan kepada 10. Walau bagaimanapun, apabila ia diakses dalam fungsi ujian, ia log tidak ditentukan.
var value = 10; function test() { //A console.log(value); var value = 20; //B console.log(value); } test();
Output :
undefined 20
Angkat masuk JavaScript:
Fenomena di sebalik tingkah laku ini dikenali sebagai pengangkat pembolehubah JavaScript. Ia menentukan bahawa semua pembolehubah yang diisytiharkan dalam sesuatu fungsi "dinaikkan" atau dialihkan ke bahagian atas skop fungsi, walaupun ia diisytiharkan selepas penggunaannya.
Dalam contoh di atas, pembolehubah nilai dinaikkan ke bahagian atas fungsi ujian. Walau bagaimanapun, hanya pengisytiharannya yang ditarik balik, dan bukan penugasannya (inisialisasi). Oleh itu, apabila console.log(value) dipanggil, ia mengakses pembolehubah dinaikkan tetapi tidak ditetapkan, mengakibatkan tidak ditentukan.
Penjelasan:
Tingkah laku ini boleh difahami melalui kod yang setara:
var value; // Global function test() { console.log(value); // Accessing the hoisted but undefined value value = 20; // Local assignment console.log(value); // Accessing the locally assigned value }
Nota Sampingan: Mengangkat Fungsi:
Pengangkatan juga digunakan pada pengisytiharan fungsi. Jika fungsi dipanggil sebelum ia diisytiharkan, ia masih akan dilaksanakan, walaupun ia belum lagi ditetapkan kepada pengecamnya.
Contohnya:
test("Won't work!"); // Error test = function(text) { alert(text); }; // Function assignment
Panggilan pertama untuk menguji gagal kerana fungsi tidak diisytiharkan pada ketika itu. Walau bagaimanapun, panggilan kedua berjaya kerana fungsi dinaikkan dan ditetapkan selepas panggilan pertama.
Kesimpulan:
Mekanisme angkat JavaScript boleh membawa kepada hasil yang tidak dijangka, terutamanya apabila mengakses pembolehubah global dalam fungsi. Memahami nuansa angkat adalah penting untuk menulis kod JavaScript yang mantap dan bebas ralat.
Atas ialah kandungan terperinci Mengapa Pembolehubah JavaScript Global Saya Kelihatan Tidak Ditakrifkan Di Dalam Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!