Maison > interface Web > js tutoriel > Parlez de l'environnement d'exécution et de la portée des compétences js_javascript

Parlez de l'environnement d'exécution et de la portée des compétences js_javascript

WBOY
Libérer: 2016-05-16 15:07:08
original
1265 Les gens l'ont consulté

On m'a récemment interrogé sur ma compréhension de la chaîne de portée lors d'une interview. J'ai senti que ma réponse n'était pas très bonne. Aujourd'hui, je vais parler de la chaîne de portée en js.

Tout d'abord, parlons de l'environnement d'exécution en js. Ce qu'on appelle l'environnement d'exécution (parfois également appelé environnement) est le concept le plus important en JavaScript. L'environnement d'exécution définit les variables ou autres données auxquelles une fonction a accès, déterminant leur comportement respectif. Chaque environnement d'exécution est associé à un objet variable, et toutes les variables et fonctions définies dans l'environnement sont stockées dans cet objet.

Maintenant que vous comprenez l'environnement d'exécution, examinons ce qu'est une chaîne de portée. Chaque fonction possède son propre environnement d'exécution et lorsque le code est exécuté dans l'environnement d'exécution, une chaîne de portée d'objets variables est créée. La chaîne de portée garantit un accès ordonné à toutes les variables et fonctions auxquelles l'environnement d'exécution a accès. L'extrémité avant de la chaîne de portées est toujours l'objet variable de l'environnement où se trouve le code en cours d'exécution. Si l'environnement est une fonction, alors son objet variable est l'objet actif de la fonction. L'objet variable suivant dans la chaîne de portée provient de l'environnement conteneur (externe) et l'objet variable suivant provient de l'environnement conteneur suivant. Cela continue avec l'environnement d'exécution global. N'oubliez pas que l'objet variable de l'environnement d'exécution global est toujours le dernier objet de la portée.

Veuillez consulter l'exemple ci-dessous :

var scope="global";
function foo(){
  console.log(scope);
}  
foo();
Copier après la connexion

Dans cet exemple, la chaîne de portée de la fonction foo() contient deux objets, l'un est son propre objet et l'autre est un objet variable dans l'environnement global. Parce que nous pouvons trouver la portée dans cette chaîne de portées, nous pouvons y accéder à l'intérieur de la fonction.

Regardons un exemple :

var color = "blue";
function changeColor(){
  var anoterColor = "red";
  function swapColor(){
    var tempColor = anoterColor;
    anoterColor = color;
    color = tempColor;
    console.log(color);
  }
  swapColor();
}
changeColor();
Copier après la connexion

Dans cet exemple, il existe trois environnements d'exécution : l'environnement global, l'environnement local de changeColor() et l'environnement local de swapColor(). Voyons à quoi ressemble la chaîne de portée pour cet exemple.

Le rectangle sur la figure représente un environnement d'exécution spécifique. Nous pouvons voir que la variable tempColor n'est accessible que dans l'environnement swapColor(), mais n'est pas accessible dans l'environnement local ou global de changeColor(). Par conséquent, nous pouvons tirer une conclusion : l'environnement interne peut accéder à tous les environnements externes via la chaîne de portée, mais l'environnement externe ne peut accéder à aucune variable et fonction de l'environnement interne. Chaque environnement peut parcourir la chaîne de portée pour interroger les noms de variables et de fonctions ; mais aucun environnement ne peut accéder à un autre environnement d'exécution en effectuant une recherche dans la portée.

Ce que je veux aussi dire à propos de la portée, c'est : js n'a pas de portée au niveau du bloc

Pourquoi est-il dit que js n'a pas de portée au niveau du bloc ? Regardons le code suivant :

if(true){
 var color = "blue"; 
}
alert(color);  //"blue"
 

Copier après la connexion

Hé, pourquoi la couleur est-elle détruite après l'exécution de l'instruction if ? Haha, si en C, C++ ou Java, la couleur sera effectivement détruite, mais en JavaScript, la déclaration de variable dans l'instruction if ajoutera la variable à l'environnement d'exécution actuel (dans ce cas, l'environnement global). En particulier, gardez cette différence à l'esprit lorsque vous travaillez avec des instructions for, telles que :

for(var i = 0;i< 10; i++){
doSomething(i);
}
alert(i);    //10
Copier après la connexion

Rappelez-vous : En JavaScript, la variable que j'ai créée par l'instruction for existera toujours dans l'environnement d'exécution en dehors de la boucle même après la fin de l'exécution de la boucle for.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal