1. La chaîne de portée des fonctions JavaScript est divisée en chaîne de portée au moment de la définition et en chaîne de portée au moment de l'exécution ;
2. Lorsqu'une fonction est définie, elle possède un attribut [[scope]] indiquant sa chaîne de portée de définition La chaîne de portée de définition [[scope]] suit les règles suivantes : la chaîne de portée de définition d'une fonction [[ scope]] est toujours la chaîne de portée de définition. chaîne de portée d'exécution de la fonction externe dans laquelle elle se trouve ;
3. La chaîne de portée de définition de la fonction globale ne contient que les attributs de window ;
4. Lorsqu'une fonction est exécutée, la chaîne de portées est toujours poussée dans l'objet actif actuel en tête de la chaîne de portées lorsqu'elle est définie (elle contient ceci, des arguments, des paramètres et des variables locales) ;
5. Lorsqu'une fonction est exécutée, l'adressage des variables est toujours recherché du haut de la chaîne de portée vers le bas, par conséquent, la vitesse d'adressage des variables globales est la plus lente ;
6. Lorsque la fonction interne est exécutée, il peut toujours accéder à sa chaîne de portée complète. C'est pourquoi les fermetures peuvent accéder aux variables définies par les fonctions externes terminées au moment de l'exécution ;
7. Lorsqu'une instruction with est rencontrée lors de l'exécution de la fonction, tous les attributs de l'objet spécifié avec seront temporairement poussés en haut de la chaîne de portée en tant que haut de la chaîne de portée ;
8. Lorsque l'exécution de la fonction rencontre un catch, l'objet d'erreur spécifié par catch sera temporairement poussé vers le haut de la chaîne de portée en tant que haut de la chaîne de portée ;
Donnons un exemple et dessinons la chaîne de portée pour approfondir la compréhension :
Il existe un tel morceau de code :
Copiez le code comme suit :
fonction assignEvents(){
var identifiant = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
saveDocument(id);
} ;
}
Appelez la fermeture anonyme générée par cette fonction Closure et dessinez la figure suivante pour montrer la chaîne de portées lorsque assignEvent est exécuté et la chaîne de portées lorsque Closure est définie :