javascript - Une question sur la promotion des noms de variables?
巴扎黑
巴扎黑 2017-06-12 09:32:55
0
5
607

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 ?

巴扎黑
巴扎黑

répondre à tous(5)
黄舟

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. 🎜
大家讲道理

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.

代言

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...

阿神

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🎜
学习ing

Panda Sang Zhengjie=_=

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