Maison > Questions et réponses > le corps du texte
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 window
为 true
, 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 ?
黄舟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 var
variables 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'
字符串执行非,得到了false
,window
里没有 window.false
这个属性,返回了 false
non
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
定义(不存在提升),又没进 if
Aprè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. 🎜大家讲道理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.
代言2017-06-12 09:34:55
var
La 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 window
是true
.
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,所以a
是123
https://developer.mozilla.org...
阿神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 vraivar a sera exécuté = 123 ;