javascript - Pourquoi le code suivant affiche-t-il « non défini » ?
迷茫
迷茫 2017-06-12 09:30:20
0
6
739

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
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(6)
巴扎黑

if("a" dans la fenêtre)
var a = 1;
alert(a);

Ty80
if(!("a" in window)){
    var a = 1;
}
alert(a);

Question 1

Non exécuté

Question 2

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 !

Quel est le principe ?

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

巴扎黑

J'ai utilisé votre code et le résultat était le popup 1

漂亮男人

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

给我你的怀抱

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

伊谢尔伦
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.

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