javascript - Soalan tentang promosi nama berubah?
巴扎黑
巴扎黑 2017-06-12 09:32:55
0
5
573

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 windowtrue, 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?

巴扎黑
巴扎黑

membalas semua(5)
黄舟

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 varpembolehubah 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' dalam tetingkap, sebenarnya, rentetan 'a' pertama kali dilaksanakan ! 'a' in window 其实是先对 'a' 字符串执行,得到了falsewindow 里没有 window.false 这个属性,返回了 falsebukan

dan 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 定义(不存在提升),又没进 ifSelepas 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.

代言

varPromosi 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 windowtrue.

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,所以a123

https://developer.mozilla.org...

阿神

Anda salah faham perenggan pertama
'a' dalam tetingkap mestilah palsu'a' in window 为 false
!'a' in window 才为 true
才会执行 var a = 123;!'a' dalam tetingkap mesti benar
var a akan dilaksanakan = 123 ;

Hanya ada yang diberi nilai 123🎜
学习ing

Panda Sang Zhengjie=_=

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