javascript - Mengapa kod berikut mengeluarkan "tidak ditentukan"?
迷茫
迷茫 2017-06-12 09:30:20
0
6
763

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
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(6)
巴扎黑

jika("a" dalam tetingkap)
var a = 1;
alert(a);

Ty80
if(!("a" in window)){
    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:

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

巴扎黑

Saya menggunakan kod anda dan hasilnya ialah pop timbul 1

漂亮男人

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

给我你的怀抱

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

伊谢尔伦
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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan