Maison  >  Article  >  interface Web  >  La signification de la fermeture en JS

La signification de la fermeture en JS

一个新手
一个新手original
2017-09-11 10:34:461215parcourir


Fermeture

Une fermeture est une fonction qui a accès à une variable dans le cadre d'une autre fonction.

Comment créer une fermeture

Le plus courant est de créer une autre fonction à l'intérieur d'une fonction. Prenons l'exemple de la fonction TrialFunction() :

function TrialFunction(property) {

      return function(a, b) {
           var a1 = a[property];           var b1 = b[property];           if (a1 < b1) {                return -1;
           } else if (a1 > b1) {                return 1;
           } else {                return 0;
           }
      };
}

Dans le code ci-dessus, la fonction interne accède à la propriété variable dans la fonction externe. Même si la fonction interne est renvoyée et appelée ailleurs, d'autres peuvent toujours accéder à la variable de propriété.

Cela se produit parce que la chaîne de portée de cette fonction interne inclut la portée de TrialFunction.

Lorsqu'une fonction est appelée, un environnement d'exécution (Contexte d'exécution) et la chaîne de portée correspondante seront créés. Par la suite, l'objet d'activité de la fonction est initialisé en utilisant les valeurs des arguments et autres paramètres nommés. Mais dans la chaîne de portée, l'objet actif de la fonction externe est toujours en deuxième place, l'objet actif de la fonction externe de la fonction externe est en troisième place, et enfin jusqu'à l'environnement d'exécution global en tant que chaîne de portée.

Lors de l'exécution de la fonction, afin de lire et d'écrire la valeur d'une variable, vous devez trouver la variable dans la chaîne de portée.

Ce mécanisme de chaîne de portée entraîne un effet secondaire, c'est-à-dire que la fermeture ne peut obtenir que la dernière valeur de n'importe quelle variable dans la fonction conteneur.
Par exemple :

function example() {
   var result = new Array();  
   for (var i = 0; i < 10; i++) 
   {
      result[i] = function() 
      {
         return i;
      }
   }   return result;
}

Cette fonction renverra un tableau. Généralement, tout le monde pensera que chaque fonction doit renvoyer son propre index, c'est-à-dire [0, 1, 2, ...9. ]; mais en fait, chaque fonction renvoie 10.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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