cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Soalan tentang promosi nama berubah?

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?

巴扎黑巴扎黑2764 hari yang lalu604

membalas semua(5)saya akan balas

  • 黄舟

    黄舟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 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. 🎜

    balas
    0
  • 大家讲道理

    大家讲道理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.

    balas
    0
  • 代言

    代言2017-06-12 09:34:55

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

    balas
    0
  • 阿神

    阿神2017-06-12 09:34:55

    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🎜

    balas
    0
  • 学习ing

    学习ing2017-06-12 09:34:55

    Panda Sang Zhengjie=_=

    balas
    0
  • Batalbalas