Chaque octet d'un programme JavaScript est exécuté dans ce contexte ou ce contexte d'exécution. Vous pouvez considérer ces contextes comme des voisins du code, qui peuvent indiquer chaque ligne de code: d'où elle vient et qui sont des amis et des voisins. Oui, il s'agit d'informations très importantes, car la société JavaScript a des règles assez strictes qui stipulent qui peut interagir avec qui. Le contexte opérationnel est une communauté avec des portes au lieu d'une minuscule porte qui est ouverte à l'intérieur.
Nous pouvons généralement se référer à ces limites sociales comme des lunettes et avoir une importance suffisante pour légiférer dans la charte de chaque voisin, qui est la chaîne de portée du contexte dont nous voulons parler. Dans une relation de quartier spécifique, le code ne peut accéder aux variables que dans sa chaîne de portée. Par rapport aux variables au-delà de son quartier, le code préfère traiter avec local (local, c'est-à-dire local).
Tout langage de programmation a le concept de portée. Autrement dit, la portée est la portée accessible des variables et des fonctions, c'est-à-dire que la portée contrôle le cycle de visibilité et de vie des variables et des fonctions. La portée de JavaScript a toujours été un point de connaissance qui est difficile à comprendre dans le développement frontal. N'oubliez pas quelques mots pour résoudre facilement la portée de JavaScript.
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 (nom);} // Signaler une erreur public static void main () {if (1 == 1) {String name = "sept"; } Console.writeline (nom);} // Signaler une erreurPas de portée au niveau du bloc en javascript
fonction main () {if (1 == 1) {var name = 'sept'; } console.log (nom);} // sortie: sept2. 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 CAVER REFEREDERROR: InnerValue n'est pas défini3. 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根据作用域链从内到外. Si la couche intérieure n'existe pas, elle consultera progressivement jusqu'à ce qu'aucune exception ne soit trouvée.
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); } retourner intérieur;} var ret = func (); ret (); // résultat 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"; fonction inner () {console.log (xo); } xo = 'sept'; retour intérieur;} 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"; barre 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); // sortie: non définie dans la fonction si écrite comme ceci: 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.
JS est une langue très intéressante. Étant donné que bon nombre de ses caractéristiques visent le fonctionnement de DOM dans HTML, il semble décontracté et légèrement moins rigoureux. Cependant, avec la prospérité et le développement continues du front-end et de la montée du nœud, JS n'est plus un "langage jouet" ou une "extension CSS" à l'ère JQuery. Le mentionné dans cet article est facile d'être confus ou mal compris pour les novices et les développeurs JS qui ont subi un développement Web traditionnel. J'espère que cet article peut être utile.