Maison  >  Article  >  interface Web  >  Fermetures en js (tutoriel détaillé)

Fermetures en js (tutoriel détaillé)

亚连
亚连original
2018-06-07 15:28:442287parcourir

Cet article présente principalement l'expérience d'apprentissage des fermetures en js et les points importants de l'écriture de code. Les amis qui sont intéressés par cela devraient apprendre ensemble.

Fermeture

Le sens chinois est de fermer un colis. Si nous considérons la portée d’une fonction comme un ensemble, 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 la 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 certains de ceux que nous écrivons habituellement davantage :

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 est ce que j'ai compilé pour tout le monde. J'espère qu'il sera utile à tout le monde. l'avenir.

Articles connexes :

Comment utiliser la technologie de reconnaissance d'image Puppeteer pour implémenter le robot d'exploration d'index Baidu

Implémenter la loupe grâce à la technologie jquery

Implémenter la mise à jour automatique des pages dans webpack-dev-server

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