cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Saya tidak tahu sama ada ini masalah dengan promosi berubah-ubah

function Box(age) {
    this.name = 'ss';
    this.age = age;
    this.flag = true;
    return this;
} //定义一个构造函数

var box1 = new Box(10); // new出一个实例

setTimeout(function () {
    box1.flag = false;
    console.log(box1.flag);
}, 5000); //五秒钟之后把 实例box1里面的flag变为false.


var inter = setInterval(function () {
    if (box1) {
        console.log(box1);
        if (!box1.flag) {
            box1 = null;
            var box1 = new Box(20);
        }
    } else {
        console.log('cleared Interval as box1 is null now');
        clearInterval(inter);
    }

}, 1000); //每一秒种先控制台打印出box1, 如果flag为false, 那么就销毁box1,然后再new出一个box1. 

Hasilnya ialah kotak keluaran langsung1 adalah batal.

cleared Interval as box1 is null now
false

Adakah kerana var akan mengisytiharkan pembolehubah tempatan terlebih dahulu, menyebabkan kotak = batal terus selepas pengisytiharan Kemudian kandungan dalam else akan dikeluarkan?

仅有的幸福仅有的幸福2728 hari yang lalu511

membalas semua(1)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-06-12 09:31:36

    Memandangkan anda mempunyai soalan, adakah anda tidak akan tahu keputusan selepas mengalih keluar var?
    Ia sememangnya promosi berubah-ubah, anda juga boleh mengeluarkan kotak1 yang ada dalam pemasa

    var inter = setInterval(function () {
        console.log(box1);    
        if (box1) {
            console.log(box1);
            if (!box1.flag) {
                box1 = null;
                var box1 = new Box(20);
            }
        } else {
            console.log('cleared Interval as box1 is null now');
            clearInterval(inter);
        }
     },1000);

    Hasilnya adalah output dahuluundefinedbukan batal seperti yang anda fikirkan.
    sebenarnya bersamaan dengan

    var inter = setInterval(function () {
      var box1;
       if (box1) {
            console.log(box1);
            if (!box1.flag) {
                box1 = null;
                box1 = new Box(20);
            }
        } else {
            console.log('cleared Interval as box1 is null now');
            clearInterval(inter);
        }
    },1000)

    Jadi, pemasa telah dicetuskan sejurus selepas mencapai titik, dan mendapati bahawa kotak1 telah diisytiharkan, tetapi tugasan sebenar belum bermula, jadi jika mengambil laluan lain

    balas
    0
  • Batalbalas