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?
Mari kita bercakap tentang peningkatan berubah-ubah dahulu
Tidak kira sama ada kod ini memasuki blok kod
if
atau tidak, a wujudKerana apabila JavaScript dilaksanakan, semua
var
pembolehubah dan fungsi deklaratif ditakrifkan melalui akan dinaikkan pangkat ke bahagian atas skop semasaPembolehubah yang dicipta melalui
var
tidak mempunyai skop peringkat blok, jadi ia akan dinaikkan pangkat ke bahagian atas skop fungsi semasaPembolehubah yang ditakrifkan dalam skop global adalah semua atribut tetingkap
Jadi kod ini sebenarnya dilaksanakan dalam susunan ini
ditakrifkan
a
,但没有赋值,自然输出了undefined
Mengenai 'a' dalam tetingkap, sebenarnya, rentetan
dan'a'
pertama kali dilaksanakan! 'a' in window
其实是先对'a'
字符串执行非,得到了false
,window
里没有window.false
这个属性,返回了false
bukanfalse
,window.false
dalam >window danfalse
dikembalikan tanpa memasukkan blok kod if.var
定义(不存在提升),又没进if
Selepas memahami perkara di atas, ia adalah sangat mudah untuk menentukan (tiada promosi), dan 🎜 tidak dimasukkan, mengakibatkan tidak ditakrifkan dan ralat dilaporkan. 🎜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.
.var
Promosi boleh ubah akan berlaku apabila mengisytiharkan Dalam peringkat penyuntingan, pengisytiharan kod diletakkan pada permulaan fungsi atau kod, jadi ia menjadi seperti ini:Jadi
a in window
是true
.Adapun
Kod tidak mengandungi
var a
。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a
是123
https://developer.mozilla.org...
Anda salah faham perenggan pertama
'a' dalam tetingkap mestilah palsu
!'a' dalam tetingkap mesti benar
Hanya ada yang diberi nilai 123🎜'a' in window
为 false!'a' in window
才为 true才会执行
var a = 123;
var a akan dilaksanakan = 123 ;
Panda Sang Zhengjie=_=