Maison > Article > interface Web > Explication détaillée de l'utilisation des fermetures en js
Cette fois, je vais vous apporter une explication détaillée de l'utilisation des fermetures js. Quelles sont les précautions lors de l'utilisation des fermetures js. Voici des cas pratiques, jetons un coup d'œil.
Fermeture
Le sens chinois est de fermer un colis. Si nous considérons la portée de la fonction comme un package, alors ce mot reflète clairement son rôle. Le flux d'exécution normal d'une fonction est qu'une fois les instructions de la fonction exécutées, le programme détruira automatiquement la portée de la fonction. Cependant, lorsqu'une autre fonction est déclarée dans une fonction et qu'il existe une variable faisant référence à la fonction parent. la sous-fonction est exécutée, une fermeture sera formée, ce qui équivaut à fermer la portée de la fonction parent et à empêcher le programme de la détruire.
Par exemple :
function a() { var name = "xuxu"; function b() { console.log(name); } // 此处产生闭包 b(); } a();
Une fermeture est créée lorsqu'une fonction peut mémoriser et accéder à la chaîne de portées dans laquelle elle se trouve. Bien sûr, la plupart des fermetures ne sont pas si intuitives. la fonction enfant peut être appelée en dehors de la fonction parent, par exemple :
function a() { var name = "xuxu"; function b() { console.log(name); } return b; } var c=a(); // 此处产生闭包 此处的c函数其实就是a函数 c();
Grâce au code ci-dessus, nous pouvons également voir l'avantage d'une fermeture, c'est-à-dire que nous pouvons utiliser la portée globale (voici Widow ) accède à la valeur de portée de la portée locale (une fonction). Selon la portée lexicale normale, cela ne peut pas être fait, mais lorsque nous utilisons des fermetures, c'est possible. Regardons ensuite quelque chose que nous écrivons habituellement plus souvent :
function foo() { var a = 2; function baz() { // 2 console.log( a ); } bar( baz ); } function bar(fn) { // 大家快看呀,这就是闭包! fn(); }
ou
var fn; function foo() { var a = 2; function baz() { console.log( a ); } // 将baz分配给全局变量 fn = baz; } function bar() { // 大家快看呀,这就是闭包! fn(); } foo(); // 2 bar();
Ce qui précède sont également des fermetures, donc les sous-fonctions sont appelées à l'intérieur de la fonction, ou par quel type of En passant la fonction interne en dehors de la portée lexicale, elle contiendra une référence à la portée de la définition d'origine, et une fermeture sera utilisée partout où cette fonction est exécutée.
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Explication détaillée de la portée et de la pré-analyse de js
Le type d'énumération Vue implémente HTML
node+express implémente une salle de discussion
Le mode observateur modifie le montant de la page
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!