La portée de JavaScript a toujours été un point de connaissance qui est difficile à comprendre dans le développement frontal. Rappelez-vous quelques mots sur la portée de JavaScript. Vous n'avez pas peur de voyager à travers le monde ...
1. "Pas de portée au niveau du bloc en JavaScript"
Il y a une portée au niveau du bloc dans Java ou C #, c'est-à-dire que les accolades sont également une portée.
public static void main () {if (1 == 1) {String name = "sept";} system.out.println (name);} // signaler une erreur publique static void main () {if (1 == 1) {String name = "sept";} console.writeline (name);} // signale une erreur une erreurPas de portée au niveau du bloc en javascript
fonction main () {if (1 == 1) {var name = 'sept';} console.log (name);} //2. JavaScript adopte la portée de la fonction
En JavaScript, chaque fonction agit comme une portée et les variables dans la portée interne ne sont pas accessibles en externe.
fonction main () {var innervalue = 'sept';} main (); console.log (innerValue); // erreur: non-rotule.3. Chaîne de portée JavaScript
Étant donné que chaque fonction dans JavaScript est une portée, si une fonction imbriquée de fonction apparaît, une chaîne de portée apparaîtra.
xo = 'alex'; fonction func () {var xo = "sept"; fonction inner () {var xo = 'alvin'; console.log (xo);} inner ();} func ();Par exemple, le code ci-dessus apparaît dans la chaîne de portée composé de trois portées. Si la chaîne de portée apparaît, l'ordre apparaîtra lors de la recherche de variables. Pour l'exemple ci-dessus:
Lorsque Console.log (XO) est exécuté, son ordre de recherche est de rechercher de l'intérieur vers l'extérieur en fonction de la priorité de la chaîne de portée. Si la couche intérieure n'existe pas, elle consultera progressivement jusqu'à ce qu'aucune exception ne soit trouvée.
425762-20160707114743577-37359182.png
4. La chaîne de portée de JavaScript a été créée avant l'exécution
La portée de JavaScript a été créée avant son exécution. Lorsqu'il est exécuté à l'avenir, il vous suffit de rechercher en fonction de la chaîne de portée.
Exemple 1:
xo = 'alex'; fonction func () {var xo = "sept"; fonction inner () {console.log (xo);} return inner;} var ret = func (); ret (); // résultats de sortie: septLe code ci-dessus existe déjà avant que la fonction ne soit appelée:
Portée globale -> Func Fonction Scope -> Portée de la fonction intérieure
Lors de l'exécution de [ret ();], puisqu'il fait référence à la fonction intérieure, la chaîne de portée de cette fonction a été définie comme: Scope globale -> Func Fonction Scope -> Étendue de la fonction interne, donc lors de l'exécution [ret ();], les variables seront trouvées sur la base de la chaîne de portée existante.
Exemple 2:
xo = 'alex'; fonction func () {var xo = "eirc"; function inner () {console.log (xo);} xo = 'sept'; return inner;} var ret = func (); ret (); // résultat de sortie: septLe code ci-dessus a le même but que l'exemple 1, et il souligne également que la chaîne de portée existe déjà avant que la fonction ne soit appelée:
Portée globale -> Func Fonction Scope -> Portée de la fonction intérieure
Différemment, lors de l'exécution de [var ret = func ();], la valeur de la variable XO dans la portée FUNC a été réinitialisée à "Sept" de "Eric", donc lors de l'exécution [ret ();] plus tard, vous ne pouvez trouver "sept".
Exemple 3:
xo = 'alex'; fonction bar () {console.log (xo);} fonction func () {var xo = "sept"; retour de retour;} var ret = func (); ret (); // résultat de sortie: alexDans le code ci-dessus, deux chaînes de portée ont été créées avant l'exécution de la fonction:
Portée globale -> Bar Fonction Scope
Scope globale -> Func Fonction Scope
Lors de l'exécution de [ret ();], RET fait référence à la fonction de barre, et la chaîne de portée de la fonction de barre existe déjà: portée globale -> Portée de la fonction de la barre, donc lors de l'exécution, il sera recherché en fonction de la chaîne de portée existante.
5. Déclaration à l'avance
Si vous ne créez pas de variables et que vous les utilisez directement dans JavaScript, une erreur sera signalée:
Console.log (xxoo); // Erreur: UNCAVER REFERTERROR: xxoo n'est pas défini
Dans JavaScript, si une valeur est créée sans attribuer une valeur, la valeur n'est pas définie, telle que:
var xxoo; console.log (xxoo); //
Si cela est écrit dans la fonction:
fonction foo () {console.log (xo); var xo = 'sept';} foo (); //Le code ci-dessus ne signale pas une erreur mais sort non défini. La raison en est qu'avant que les fonctions JavaScript ne soient exécutées, elles en déclareront toutes les variables sans attribuer des valeurs. Par conséquent, il équivaut à l'exemple ci-dessus que la fonction a déjà exécuté var xo lorsqu'il est "précompilé"; Ainsi, la sortie du code ci-dessus n'est pas définie.
Ce qui précède est ce que l'éditeur vous a présenté pour résoudre la portée JavaScript (classique) en seulement cinq phrases. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!