Maison  >  Questions et réponses  >  le corps du texte

javascript - Pourquoi le code suivant affiche-t-il « non défini » ?

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
迷茫迷茫2686 Il y a quelques jours722

répondre à tous(6)je répondrai

  • 巴扎黑

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

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

    répondre
    0
  • PHP中文网

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

    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

    répondre
    0
  • 巴扎黑

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

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

    répondre
    0
  • 漂亮男人

    漂亮男人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

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱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

    répondre
    0
  • 伊谢尔伦

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

    répondre
    0
  • Annulerrépondre