var a;
if (true) {
a = 5;
function a() {}
a = 0;
console.log(a)
}
console.log(a)
J'ai vu le code ci-dessus, une fonction est déclarée dans {}. Je pense qu'il imprimerait 0 0, mais il imprime 0 5
javascript
Marcus Lee
la source
la source
0 undefined
.a = 5
laisse le bloc. Selon bergi dans la dupe,function a
sera hissé.Réponses:
Les événements suivants se produisent:
(1) Il existe deux déclarations de variables
a
, une à l'intérieur du bloc et une à l'extérieur de celui-ci.(2) La déclaration de fonction est hissée et liée à la variable des blocs internes.
(3)
a = 5
est atteint, ce qui remplace la variable de bloc.(4) la déclaration de fonction est atteinte et la variable de bloc est copiée dans la variable externe. Les deux ont maintenant 5 ans.
(5)
a = 0
est atteint, ce qui remplace la variable de bloc. La variable externe n'est pas affectée par cela.En fait, cela ne fait pas vraiment partie de la spécification, il fait partie de la sémantique de compatibilité héritée du Web , donc ne déclarez pas de fonctions à l'intérieur des blocs et ne comptez pas sur ce code pour vous comporter de cette façon .
Ceci est également expliqué ici
la source