Rumah  >  Soal Jawab  >  teks badan

javascript - Mengapa kod berikut mengeluarkan "tidak ditentukan"?

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
迷茫迷茫2686 hari yang lalu723

membalas semua(6)saya akan balas

  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

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

    balas
    0
  • PHP中文网

    PHP中文网2017-06-12 09:32:20

    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

    balas
    0
  • 巴扎黑

    巴扎黑2017-06-12 09:32:20

    Saya menggunakan kod anda dan hasilnya ialah pop timbul 1

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:32:20

    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

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-12 09:32:20

    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

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:32:20

    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.

    balas
    0
  • Batalbalas