Maison  >  Article  >  interface Web  >  Explication détaillée des fermetures dans JS

Explication détaillée des fermetures dans JS

小云云
小云云original
2018-03-26 15:55:261166parcourir

Cet article partage principalement avec vous l'explication détaillée des fermetures en JS. Il vous l'explique principalement sous forme de code.

var n = 999;
function f1() {
  console.log(n);
}
f1() // 999

JavaScript a deux types de portée : la portée globale et la portée de la fonction. Les variables globales peuvent être lues directement dans la fonction. La fonction f1 peut lire la variable globale n. Cependant, les variables déclarées à l'intérieur d'une fonction ne peuvent pas être lues en dehors de la fonction.

function f1() {
  var n = 99;
}
console.log(n);

Cependant, nous devons parfois accéder à des variables à l'intérieur de la fonction depuis l'extérieur de la fonction ; dans des circonstances normales, cela n'est pas possible et ne peut être réalisé que par des solutions de contournement. C’est définir une autre fonction à l’intérieur de la fonction.

function f1() {
  var n = 999;
  var f2 = function() {
      console.log(n);
  }
return f2;
}
var f = f1();
f();

Dans le code ci-dessus, la fonction f2 est à l'intérieur de la fonction f1. À ce stade, toutes les variables locales à l'intérieur de f1 sont visibles par f2. Mais l’inverse ne fonctionne pas. Les variables locales à l’intérieur de f2 sont invisibles pour f1. Il s'agit de la structure unique de « portée de chaîne » du langage JavaScript. L'objet enfant recherchera les variables de tous les objets parents niveau par niveau. Par conséquent, toutes les variables de l’objet parent sont visibles par l’objet enfant, mais l’inverse n’est pas vrai.

Puisque f2 peut lire les variables locales de f1, alors mettez simplement f2 est utilisé comme valeur de retour, nous pouvons donc lire ses variables internes en dehors de f1. La fermeture est la fonction f2, une fonction qui peut lire les variables internes d'autres fonctions. Étant donné que dans le langage JavaScript, seules les sous-fonctions d'une fonction peuvent lire les variables internes, les fermetures peuvent être simplement comprises comme des « fonctions définies à l'intérieur d'une fonction ». La plus grande caractéristique de la fermeture est qu'elle peut « se souvenir » de l'environnement dans lequel elle est née. Par exemple, f2 se souvient de l'environnement f1 dans lequel elle est née, de sorte que les variables internes de f1 peuvent être obtenues à partir de f2. Essentiellement, une fermeture est un pont reliant l’intérieur d’une fonction à l’extérieur de la fonction. Autrement dit, les fermetures ont deux utilisations principales. L'une consiste à lire les variables à l'intérieur de la fonction et l'autre à conserver ces variables en mémoire. Autrement dit, la fermeture peut toujours faire exister l'environnement dans lequel elle est née.
Recommandations associées :

Une brève explication des fermetures en JS

Comment utiliser les fermetures en js ?

Une brève discussion sur les fermetures dans les compétences js_javascript

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