Rumah > Soal Jawab > teks badan
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
PHP中文网2017-06-12 09:32:20
if(!("a" in window)){
var a = 1;
}
alert(a);
Tidak dilaksanakan
Promosi boleh ubah bukan disebabkan oleh kenyataan, tetapi sebenarnya dilakukan apabila enjin js menyusun kod js anda!
Ambil chrome sebagai contoh Apabila enjin v8 pertama menemui kod anda, ia akan menjadi seperti ini:
var a;
if(!("a" in window)){
a = 1;
}
alert(a);
Maka kerana a telah diisytiharkan, !("a" dalam tetingkap) sentiasa palsu! Pernyataan di dalam jika tidak dilaksanakan!
Jadi apabila alert(a), a tidak mempunyai nilai
漂亮男人2017-06-12 09:32:20
Pengisytiharan berubah menjadi kod berikut selepas promosi
var a; // 这里变量声明提升了
if(!("a" in window)){
a = 1;
}
alert(a);
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
给我你的怀抱2017-06-12 09:32:20
var a;
jika(!(a dalam tetingkap)){
var a = 1;
}
alert(a);
jika tidak benar, sudah tentu kod di dalamnya tidak akan dilaksanakan, jadi tidak salah untuk undefined
伊谢尔伦2017-06-12 09:32:20
if(!("a" in window)){
var a = 1;
}
alert(a);
Apabila enjin JavaScript menghuraikan kod ini, ia akan dihuraikan seperti berikut:
var a ;
if(!("a" in window)){
a = 1;
}
alert(a);
Oleh kerana a
anda telah diisytiharkan sebagai harta tetingkap, jadi syarat if sentiasa palsu, dan a tidak ditentukan jika ia tidak diberikan nilai.