Tingkah laku yang anda temui di mana pembolehubah global pada mulanya tidak ditentukan dalam fungsi boleh dikaitkan dengan pengangkat pembolehubah JavaScript mekanisme. JavaScript secara automatik mengangkat pengisytiharan pembolehubah ke bahagian atas skop yang disertakan, walaupun jika penetapan nilai sebenar berlaku kemudian dalam kod.
Dalam contoh yang diberikan, nilai pembolehubah global diisytiharkan dengan nilai awal 10. Walau bagaimanapun, dalam fungsi ujian, pembolehubah tempatan dengan nama (nilai) yang sama juga diisytiharkan tanpa nilai yang ditetapkan (yang lalai kepada undefined).
Pernyataan console.log pertama dalam fungsi cuba mengakses nilai global, tetapi memandangkan nilai setempat telah dinaikkan, ia diutamakan. Akibatnya, panggilan pertama dicetak tidak ditentukan. Selepas itu, pernyataan console.log kedua dalam fungsi memaparkan nilai yang diberikan kepada pembolehubah nilai setempat (20).
Fenomena angkat ini digunakan untuk kedua-dua pembolehubah dan fungsi dalam konteks pelaksanaan semasa mereka. Adalah penting untuk memahami bahawa hanya pengisytiharan, bukan tugasan, yang dinaikkan. Ini bermakna pembolehubah boleh diakses di seluruh skopnya, tetapi pembolehubah tersebut mungkin tidak mempunyai nilai yang ditetapkan sehingga kod tersebut mencapai penyataan tugasan.
Sebagai contoh, pertimbangkan coretan kod berikut:
var test = 'start'; function end() { test = 'end'; var test = 'local'; } end(); alert(test);
Yang menghairankan, kod ini akan mencetak permulaan, walaupun penghujung fungsi seolah-olah mengubah nilai pembolehubah ujian. Ini kerana dalam fungsi akhir, pengisytiharan pembolehubah tempatan baharu diutamakan dan pembolehubah global kekal tidak berubah.
Walaupun pengangkat pembolehubah boleh memudahkan kod, adalah penting untuk mengetahui implikasinya untuk mengelakkan tingkah laku yang tidak diingini. Merangkum pembolehubah dengan betul dan memahami sepenuhnya mekanisme pengangkatan boleh membantu mengekalkan struktur kod dan mencegah kemungkinan ralat.
Atas ialah kandungan terperinci Mengapa Pembolehubah Global saya Tidak Ditakrifkan Di Dalam Fungsi JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!