La première règle d'or:
JS n'a pas de portée au niveau du bloc (vous pouvez l'implémenter par vous-même avec des fermetures ou d'autres méthodes), uniquement la portée au niveau de la fonction. Les variables en dehors de la fonction peuvent être trouvées dans la fonction, mais les variables à l'intérieur de la fonction ne peuvent pas être trouvées à l'extérieur.
Firsttry:
Pourquoi est-ce? ?
var a = 10; fonction aaa () {// Step-4Alert (a); // Step-5-> Exécuter l'alerte, pour le moment, vous ne pouvez trouver que l'extérieur a = 10 donc la boîte pop-up 10} fonction bbb () {// Step-2Var a = 20; aaa (); // Step-3} // Définition de la fonction est sans usolEn fait, tout le monde comprend le principe, ce ne devrait être qu'une question d'erreurs faciles, et tout changera.
Secondtry:
Pourquoi est-ce? Parce que lorsque A est attribué B, B n'est pas encore défini, donc A n'est pas défini et B est 10.
Article 2 du Code d'or:
La recherche de variables est le principe de la proximité. Pour trouver les variables définies par VAR, lorsqu'elles ne sont pas trouvées à proximité, recherchez la couche externe.
regarder:
Pourquoi est-ce? Il y a deux raisons à cela: l'une est la pré-analyse, et l'autre cherche à proximité.
var a = 10; fonction aaa () {alert (a); // non défini. Lorsque vous recherchez un, vous rechercherez dans la fonction. En raison de l'effet du pré-pat, a n'est pas défini pour le moment, vous ne rechercherez donc jamais le 10 var a = 20; / * préparant var aalert (a); var a = 20; * /} aaa ();attention:
Vérifions le deuxième élément. Bien que ce soit le principe de la proximité, il s'agit de trouver la variable déclarée par Var à proximité. En effet, les variables déclarées par VAR sont globales. Ici, la valeur de A est juste modifiée. Donc, ce qui précède est parce que le a de var n'est pas trouvé dans la fonction, donc je suis sorti et je l'ai trouvé dès que j'ai fouillé, donc A l'a alerté 10; Mais la vérité est qu'après A = 20, A est en effet 20, mais il n'a pas encore été exécuté lorsqu'il a été alerté ~~
Voir ~
L'exemple suivant vérifie davantage la portée de la fonction de JS:
En effet, lorsque l'alerte (a), a dans la fonction BBB est en effet 20, mais elle est locale à l'alerte de phrase (a) pour le moment. L'alerte (a) ne peut pas trouver une fonction BBB, donc elle ne peut pas trouver une dans la fonction AAA, donc il sort et trouve 10.
Article 3 du Code d'or:
Lorsque les paramètres sont dupliqués avec des variables locales, la priorité est équivalente.
exemple:
Aussi: Lors de la transmission des paramètres, le type de base passe la valeur et le type de référence passe la référence. (Mais ce n'est pas le cas après la réaffectation)
var a = 5; var b = a; b + = 3; alert (a); // 5var a = [1,2,3]; var b = a; b.push (4); alert (a); // [1,2,3,4];
Il n'y a aucun problème avec le code ci-dessus, mais ce qui suit est différent.
Parce que B est réaffecté, il ne pointe pas vers a.
De plus, la portée des paramètres et des variables est similaire:
Comparez ces deux:
Les paramètres ci-dessus sont des types de base, et seules les valeurs sont passées. Ce qui suit est un type de référence: (comprend également le cas de la réaffectation)