recherche

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

javascript - Une question sur la promotion des noms de variables?

Après avoir exécuté le code suivant, ce sera undefined

<script type="text/javascript">
if (! 'a' in window) {
  var a = 123;
}
console.log(a);
</script>

Explication 'a' in windowtrue, mais quand a-t-on déclaré ? S'il vous plaît, dites-moi, merci !

J'ai changé le code en :

<script type="text/javascript">
if (! 'a' in window) {
  a = 123;
}
console.log(a);
</script>

Le résultata is not defined。 既然 a a été déclaré, pourquoi cette erreur est-elle signalée ?

巴扎黑巴扎黑2713 Il y a quelques jours576

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

  • 黄舟

    黄舟2017-06-12 09:34:55

    Parlons d’abord de l’amélioration variable

    if (! 'a' in window) {
      var a = 123;
    }
    console.log(a);

    Peu importe que ce code entre ou non dans le bloc de code de if, un existe

    Parce que lorsque JavaScript est exécuté, toutes les varvariables et fonctions déclaratives définies via seront promues en haut de la portée actuelle

    Les variables créées via var n'ont pas de portée au niveau du bloc, elles seront donc promues au sommet de la portée actuelle de la fonction

    Les variables définies dans la portée globale sont toutes des attributs de window

    Donc ce code est réellement exécuté dans cet ordre

    var a;
    if (! 'a' in window) {
      a = 123;
    }
    console.log(a); // undefined 

    défini a,但没有赋值,自然输出了 undefined

    À propos de  ! 'a' dans la fenêtre, en fait, la chaîne 'a' est exécutée en premier ! 'a' in window 其实是先对 'a' 字符串执行,得到了falsewindow 里没有 window.false 这个属性,返回了 falsenon

    , et false, window.false dans >window, et false est renvoyé sans entrer le bloc de code if.

    Vous pouvez essayer les exemples suivants

    false in window; // false
    
    window.false = 123;
    
    false in window; // true
    
    !false in window; // false
    
    true in window; // false
    
    window.true = 456;
    
    !false in window; // true
    
    'true' in window; // true

    Deuxième question

    if (! 'a' in window) {
      a = 123;
    }
    console.log(a); // Uncaught ReferenceError: a is not defined
    var 定义(不存在提升),又没进 ifAprès avoir compris ce qui précède, c'est très simple. Il est inutile de définir

    (il n'y a pas de promotion), et 🎜 n'est pas renseigné, ce qui entraîne une non-définition et une erreur signalée. 🎜

    répondre
    0
  • 大家讲道理

    大家讲道理2017-06-12 09:34:55

    Il n’y a rien de mal à cette exécution, ! 'a' in window这个是false,然后a的赋值没执行,再console不就是undefined么。
    如果想让赋值执行,判断条件改成!('a' in window)C’est tout.

    Si vous ne comprenez toujours pas, consultez la liste de priorité des opérateurs.

    répondre
    0
  • 代言

    代言2017-06-12 09:34:55

    varLa promotion de la variable se produira lors de la déclaration. Lors de la phase d'édition, la déclaration du code est placée au début de la fonction ou du code, elle devient donc comme ceci :

    <script type="text/javascript">
    var a;
    if (! ('a' in window)) {
      a = 123;
    }
    console.log(a);
    </script>

    Alorsa in windowtrue.

    Quant à

    <script type="text/javascript">
    if (! ('a' in window)) {
      a = 123;
    }
    console.log(a);
    </script>

    Le code ne contient pas var a。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a123

    https://developer.mozilla.org...

    répondre
    0
  • 阿神

    阿神2017-06-12 09:34:55

    Vous avez mal compris le premier paragraphe
    'a' dans la fenêtre doit être faux'a' in window 为 false
    !'a' in window 才为 true
    才会执行 var a = 123;!'a' dans la fenêtre doit être vrai
    var a sera exécuté = 123 ;

    Il n'y a qu'un à qui a la valeur 123🎜

    répondre
    0
  • 学习ing

    学习ing2017-06-12 09:34:55

    Panda Sang Zhengjie=_=

    répondre
    0
  • Annulerrépondre