Kod adalah seperti berikut:
if(!("a" in window)){
var a = 1;
}
alert(a);
Saya telah melihat penjelasan yang berkaitan, sebabnya ialah pengisytiharan berubah akan dinaikkan, tetapi tugasan berubah tidak akan dinaikkan, tetapi saya masih tidak memahaminya. Adakah kod dalam blok pernyataan if telah dilaksanakan? Jika tidak, pernyataan manakah yang menyebabkan pembolehubah itu dinaikkan pangkat? Jika dilaksanakan, nilai a hendaklah 1.
Cuba masukkan kod berikut ke dalam konsol
alert(b)//报错,b未被定义;
if (2>1){
var b=1;
}
alert(b)//1
jika("a" dalam tetingkap)
var a = 1;
alert(a);
Soalan 1
Tidak dilaksanakan
Soalan 2
Promosi boleh ubah bukan disebabkan oleh kenyataan, tetapi sebenarnya dilakukan apabila enjin js menyusun kod js anda!
Apakah prinsipnya?
Ambil chrome sebagai contoh Apabila enjin v8 pertama menemui kod anda, ia akan menjadi seperti ini:
Maka kerana a telah diisytiharkan, !("a" dalam tetingkap) sentiasa palsu! Pernyataan di dalam jika tidak dilaksanakan!
Jadi apabila alert(a), a tidak mempunyai nilai
Saya menggunakan kod anda dan hasilnya ialah pop timbul 1
Pengisytiharan berubah menjadi kod berikut selepas promosi
Selepas pengisytiharan pembolehubah dinaik taraf, a ditakrifkan dahulu, dan kemudian penyataan if dimasukkan a ialah atribut tetingkap Selepas diterbalikkan, ia menjadi palsu, jadi kod dalam pernyataan if tidak dilaksanakan, dan yang terakhir perkara yang timbul ialah
undefined
var a;
jika(!(a dalam tetingkap)){
}
alert(a);
jika tidak benar, sudah tentu kod di dalamnya tidak akan dilaksanakan, jadi tidak salah untuk undefined
Apabila enjin JavaScript menghuraikan kod ini, ia akan dihuraikan seperti berikut:
Oleh kerana
a
anda telah diisytiharkan sebagai harta tetingkap, jadi syarat if sentiasa palsu, dan a tidak ditentukan jika ia tidak diberikan nilai.