Rumah > Soal Jawab > teks badan
Selepas melaksanakan kod berikut, ia akan menjadi undefined
<script type="text/javascript">
if (! 'a' in window) {
var a = 123;
}
console.log(a);
</script>
Penjelasan 'a' in window
为 true
, tetapi bila diisytiharkan? Tolong beritahu saya, terima kasih!
Saya menukar kod kepada:
<script type="text/javascript">
if (! 'a' in window) {
a = 123;
}
console.log(a);
</script>
Hasilnyaa is not defined
。 既然 a
telah diisytiharkan, mengapa ralat ini dilaporkan?
黄舟2017-06-12 09:34:55
Mari kita bercakap tentang peningkatan berubah-ubah dahulu
if (! 'a' in window) {
var a = 123;
}
console.log(a);
Tidak kira sama ada kod ini memasuki blok kod if
atau tidak, a wujud
Kerana apabila JavaScript dilaksanakan, semua var
pembolehubah dan fungsi deklaratif ditakrifkan melalui akan dinaikkan pangkat ke bahagian atas skop semasa
Pembolehubah yang dicipta melalui var
tidak mempunyai skop peringkat blok, jadi ia akan dinaikkan pangkat ke bahagian atas skop fungsi semasa
Pembolehubah yang ditakrifkan dalam skop global adalah semua atribut tetingkap
Jadi kod ini sebenarnya dilaksanakan dalam susunan ini
var a;
if (! 'a' in window) {
a = 123;
}
console.log(a); // undefined
ditakrifkan a
,但没有赋值,自然输出了 undefined
Mengenai 'a'
pertama kali dilaksanakan ! 'a' in window
其实是先对 'a'
字符串执行非,得到了false
,window
里没有 window.false
这个属性,返回了 false
bukan
false
, window.false
dalam >window dan false
dikembalikan tanpa memasukkan blok kod if. Boleh cuba contoh berikut
false in window; // false
window.false = 123;
false in window; // true
!false in window; // false
true in window; // false
window.true = 456;
!false in window; // true
'true' in window; // true
Soalan kedua
if (! 'a' in window) {
a = 123;
}
console.log(a); // Uncaught ReferenceError: a is not defined
var
定义(不存在提升),又没进 if
Selepas memahami perkara di atas, ia adalah sangat mudah untuk menentukan (tiada promosi), dan 🎜 tidak dimasukkan, mengakibatkan tidak ditakrifkan dan ralat dilaporkan. 🎜大家讲道理2017-06-12 09:34:55
Tiada salah dengan pelaksanaan ini, ! 'a' in window
这个是false,然后a的赋值没执行,再console不就是undefined么。
如果想让赋值执行,判断条件改成!('a' in window)
Itu sahaja.
Jika anda masih tidak faham, semak senarai keutamaan operator.
代言2017-06-12 09:34:55
var
Promosi boleh ubah akan berlaku apabila mengisytiharkan Dalam peringkat penyuntingan, pengisytiharan kod diletakkan pada permulaan fungsi atau kod, jadi ia menjadi seperti ini:
<script type="text/javascript">
var a;
if (! ('a' in window)) {
a = 123;
}
console.log(a);
</script>
Jadia in window
是true
.
Adapun
<script type="text/javascript">
if (! ('a' in window)) {
a = 123;
}
console.log(a);
</script>
Kod tidak mengandungi var a
。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a
是123
https://developer.mozilla.org...
阿神2017-06-12 09:34:55
Anda salah faham perenggan pertama'a' in window
为 false!'a' in window
才为 true
才会执行 var a = 123;
var a akan dilaksanakan = 123 ;