Considérez la pièce de code suivante: La sortie de ce code est que la zone d'alerte affiche le message "À l'extérieur
Portée ". Mais si je modifie légèrement le code comme: p> La zone d'alerte affiche le message" indéfini em> ". je pourrais avoir
compris la logique s'il affiche "indéfini" dans les deux cas. Mais ça
ne se passe pas. Il affiche "indéfini" uniquement dans le second cas. Pourquoi est-ce? P> Merci d'avance pour votre aide! P> P>
6 Réponses :
Dans le premier cas, votre code accède à la variable globale "extérieure_scope", qui a été initialisé en "Portée extérieure". P>
JavaScript dispose d'une portée de niveau de fonction, donc dans le second cas, il accède à la fonction Fonction variable "extérieure_scope", mais elle n'a pas encore été initialisée au moment de la boîte d'alerte. Donc il affiche indéfini. P>
Dans le deuxième exemple, la variable locale existe pour toute la portée de la fonction. Peu importe que vous l'avez défini après l'alerte, il existe em> pour toute la fonction. P>
Cependant, l'affectation réelle ne se produit qu'après l'alerte, d'où le "indéfini". p>
C'est un cas intéressant. P>
Dans le premier exemple, vous avez défini une variable «globale». Il a une portée globale et est donc accessible dans n'importe quelle fonction / objet pour l'exécution. P>
Dans le deuxième exemple, vous avez «bloqué» la variable globale avec la variable d'étendue de la fonction, mais comme il n'a pas encore été initialisé au moment de l'alerte, il renvoie «indéfini». P>
Je suis d'accord Ce n'est pas l'ennemi le plus intuitif, mais cela a du sens. P>
JavaScript a la portée de la fonction, ne bloque pas la portée.
Dans le second cas, la déclaration d'extérieur_scope est hissée jusqu'au sommet de la fonction (mais l'affectation n'est pas). P>
Ceci est un excellent exemple de la raison pour laquelle le code JavaScript est plus facile à lire si vous mettez toutes vos déclarations variables en haut de la fonction. Votre deuxième exemple est équivalent à: p> et vous pouvez probablement maintenant comprendre pourquoi vous obtenez "indéfini". P> P>
Les variables sont soumises à Par exemple: P> var outside_scope = "outside scope";
function f1() {
var outside_scope; // is undefined
alert(outside_scope) ;
outside_scope = "inside scope";
}
f1();
Après des années, je ne savais pas que, peut-être parce que je déclare toujours en haut, comme dans C.
Ceci est dû à quelque chose appelé "Strong> hisser des déclarations variables fortes>.
Fondamentalement, JavaScript sépare une déclaration variable en deux forte>, laissant la mission où vous avez fait la déclaration et hisser la déclaration réelle à sur l'heure d'exécution, C'est aussi la raison, il est f1 () code> obtient traduit en
f2 () code>. J'ai écrit un article de blog en profondeur sur ce ici A >. J'espère que cela vous aide à comprendre ce qui se passe dans votre code. P>