Rumah >hujung hadapan web >tutorial js >Mengapa Pembolehubah JavaScript Global Saya Tidak Ditakrifkan Fungsi Dalaman?

Mengapa Pembolehubah JavaScript Global Saya Tidak Ditakrifkan Fungsi Dalaman?

DDD
DDDasal
2024-12-04 22:53:12772semak imbas

Why Are My Global JavaScript Variables Undefined Inside Functions?

JavaScript Variable Hoisting: Mendedahkan Misteri Pembolehubah Global Tidak Ditakrifkan

Apabila bekerja dengan pembolehubah JavaScript, mudah untuk menghadapi tingkah laku yang mengejutkan. Satu contoh sedemikian ialah apabila pembolehubah global kelihatan mempunyai nilai yang tidak ditentukan dalam sesuatu yang tertentu fungsi.

Contoh:

var value = 10;
function test() {
    console.log(value); // A
    var value = 20;
    console.log(value); // B
}
test();

Output:

undefined
20

Penjelasan:

Tingkah laku berpunca daripada Pembolehubah JavaScript Mengangkat, yang mengalihkan pembolehubah dan pengisytiharan fungsi secara automatik ke bahagian atas skop semasa. Ini bermakna:

  • Nilai pembolehubah global dinaikkan ke bahagian atas fungsi ujian.
  • Pada titik A, atur cara mencetak nilai bagi pembolehubah nilai setempat, yang belum dimulakan.
  • Pada titik B, atur cara mencetak dengan betul nilai pembolehubah tempatan yang baru dimulakan.

Sebenarnya, kod tersebut berkelakuan seolah-olah ia ditulis sebagai:

var value;

function test() {
    console.log(value); // undefined
    value = 20;
    console.log(value); // 20
}

Nota Sampingan: Fungsi pengisytiharan juga menjalani pengangkatan. Inilah sebabnya anda boleh memanggil fungsi sebelum ia diisytiharkan, tidak seperti penugasan pembolehubah.

Kesimpulan:

Pengangkat pembolehubah harus dipertimbangkan apabila bekerja dengan pembolehubah JavaScript. Dengan memahami tingkah laku ini, pembangun boleh mengelakkan nilai yang tidak ditakrifkan yang tidak dijangka dalam kod mereka. Selain itu, sumber seperti "JavaScript Scoping and Hoisting" Ben Cherry boleh memberikan cerapan lanjut tentang aspek asas JavaScript ini.

Atas ialah kandungan terperinci Mengapa Pembolehubah JavaScript Global Saya Tidak Ditakrifkan Fungsi Dalaman?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn