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 ?
Parlons d’abord de l’amélioration variable
Peu importe que ce code entre ou non dans le bloc de code de
if
, un existeParce 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 actuelleLes 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 fonctionLes 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
défini
a
,但没有赋值,自然输出了undefined
À propos de
, et! '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
nonfalse
,window.false
dans >window, etfalse
est renvoyé sans entrer le bloc de code if.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. 🎜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.
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 :Alors
a in window
是true
.Quant à
Le code ne contient pas
var a
。所以不存在变量提升的问题,所以a就没有声明过,所以!('a' in window)是true,所以a
是123
https://developer.mozilla.org...
Vous avez mal compris le premier paragraphe
Il n'y a qu'un à qui a la valeur 123🎜'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 ;
Panda Sang Zhengjie=_=