Maison > Questions et réponses > le corps du texte
Le code est le suivant :
if(!("a" in window)){
var a = 1;
}
alert(a);
J'ai vu l'explication pertinente, la raison est que la déclaration des variables sera promue, mais l'affectation des variables ne sera pas promue, mais je ne la comprends toujours pas. Le code du bloc d'instruction if a-t-il été exécuté ? Si non, quelle instruction a provoqué la promotion de la variable ? S'il est exécuté, la valeur de a doit être 1.
J'ai essayé de saisir le code suivant dans la console
alert(b)//报错,b未被定义;
if (2>1){
var b=1;
}
alert(b)//1
PHP中文网2017-06-12 09:32:20
if(!("a" in window)){
var a = 1;
}
alert(a);
Non exécuté
La promotion variable n'est pas provoquée par des instructions, mais est réellement effectuée lorsque le moteur js compile votre code js !
Prenons Chrome comme exemple. Lorsque le premier moteur v8 rencontrera votre code, il deviendra comme ceci :
var a;
if(!("a" in window)){
a = 1;
}
alert(a);
Ensuite, parce que a a été déclaré, !("a" dans la fenêtre) est toujours faux ! L'instruction à l'intérieur de if n'est pas exécutée !
Donc, quand alert(a), a n'a aucune valeur
漂亮男人2017-06-12 09:32:20
La déclaration de variable est mise à niveau vers le code suivant
var a; // 这里变量声明提升了
if(!("a" in window)){
a = 1;
}
alert(a);
Une fois la déclaration de variable mise à niveau, a est défini en premier, puis l'instruction if est entrée. a est un attribut de window Après avoir été inversé, il devient faux, donc le code de l'instruction if n'est pas exécuté, et la dernière. la chose qui apparaît est undefined
给我你的怀抱2017-06-12 09:32:20
var a;
if(!(a dans la fenêtre)){
var a = 1;
}
alert(a);
si ce n'est pas vrai, bien sûr, le code à l'intérieur ne sera pas exécuté, il n'y a donc rien de mal à ce qu'il soit indéfini
伊谢尔伦2017-06-12 09:32:20
if(!("a" in window)){
var a = 1;
}
alert(a);
Lorsque le moteur JavaScript analysera ce code, il sera analysé comme suit :
var a ;
if(!("a" in window)){
a = 1;
}
alert(a);
Parce que votre a
a été déclaré comme propriété de window, donc la condition if est toujours fausse, et a n'est pas défini si aucune valeur ne lui est attribuée.