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

Mengapa Pembolehubah JavaScript Global Saya Kelihatan Tidak Ditakrifkan Di Dalam Fungsi?

Barbara Streisand
Lepaskan: 2024-12-09 08:27:07
asal
848 orang telah melayarinya

Why Does My Global JavaScript Variable Appear Undefined Inside a Function?

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();
Salin selepas log masuk

Output :

undefined
20
Salin selepas log masuk

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
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan