javascript - Je ne sais pas si c'est un problème avec la promotion des variables
仅有的幸福
仅有的幸福 2017-06-12 09:29:36
0
1
551
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. 

Le résultat est que la boîte de sortie directe1 est nulle.

cleared Interval as box1 is null now
false

Est-ce parce que var déclarera d'abord les variables locales, ce qui provoquera box = null directement après la déclaration. Ensuite, le contenu de else sera affiché ?

仅有的幸福
仅有的幸福

répondre à tous(1)
phpcn_u1582

Puisque vous avez des questions, ne connaîtriez-vous pas le résultat après avoir supprimé var ?
C'est en effet une promotion variable, autant afficher quelle est la case 1 dans le timer

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);

Le résultat est affiché en premierundefinedpas nul comme vous le pensez.
est en fait équivalent à

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)

Ainsi, le minuteur s'est déclenché juste après avoir atteint le point et a constaté que la case 1 avait été déclarée, mais que l'affectation proprement dite n'avait pas encore commencé, donc le if a pris la route else

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal