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

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

DDD
Libérer: 2024-10-31 08:03:01
original
656 Les gens l'ont consulté

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>
Copier après la connexion
  • 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>
Copier après la connexion
  • 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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal