Maison  >  Article  >  interface Web  >  Une fonction interne est-elle toujours une fermeture en JavaScript ?

Une fonction interne est-elle toujours une fermeture en JavaScript ?

DDD
DDDoriginal
2024-10-31 08:03:01562parcourir

Is an inner function always a closure in JavaScript?

Fermetures JavaScript vs fonctions anonymes

En JavaScript, une fermeture se produit lorsqu'une fonction interne a accès aux variables de la portée externe, même après la fonction externe a terminé son exécution. De nombreuses fonctions en JavaScript sont considérées comme des fermetures, mais seul un sous-ensemble spécifique présente théoriquement un intérêt particulier.

Cas 1 : Code d'un ami

<code class="js">(function f() {
  var i2 = i;
  setTimeout(function g() {
    console.log(i2);
  }, 1000);
})();</code>
  • Fonction f n'est pas une fermeture car aucune de ses variables libres n'est fermée. Cependant,
  • La fonction g est une fermeture pour la variable libre i2. La variable i2 est capturée lors de la création de g.

Cas 2 : Votre code

<code class="js">setTimeout((function f(i2) {
  return function g() {
    console.log(i2);
  };
})(i), 1000);</code>
  • La fonction f n'est pas une fermeture car elle n'a pas de variables libres.
  • La fonction g est une fermeture pour la variable libre i2. La variable i2 est capturée lors de la création de g.

Conclusion

Par conséquent, dans les deux solutions fournies, la fonction interne g est une fermeture, mais pas les extérieurs. Cela démontre que même s’ils obtiennent le même résultat, ils le font par des mécanismes différents.

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