Fermetures JavaScript et fonctions anonymes
Les fonctions anonymes, une caractéristique courante en JavaScript, surviennent souvent dans les discussions sur les fermetures. Cependant, toutes les fonctions anonymes ne sont pas considérées comme de véritables fermetures.
Définition des fermetures
Une fermeture en JavaScript est un type spécial de fonction anonyme qui conserve l'accès à la portée lexicale dans lequel il a été créé, même après la fin de la portée externe. Cette fonctionnalité permet aux fermetures de « capturer » les valeurs des variables de la portée externe, les empêchant ainsi d'être récupérées.
Étude de cas : Fermer sur une variable
Dans Dans les exemples de code donnés, les deux solutions utilisent des fonctions anonymes pour retarder l'impression de la variable du compteur i.
Tentative d'un ami
Le code du premier exemple semble capturer le je variable dans la fermeture. Cependant, elle ne répond pas à la définition d’une fermeture car la fonction anonyme interne g n’hérite pas de la portée lexicale de la fonction externe f. Ainsi, i n'est pas réellement "fermé".
<code class="javascript">for(var i = 0; i < 10; i++) { (function(){ var i2 = i; setTimeout(function(){ console.log(i2); }, 1000) })(); }</code>
Tentative de l'éditeur
Le deuxième exemple de code crée véritablement une fermeture. La fonction anonyme renvoyée par la fonction externe f capture la variable i2 et préserve sa valeur dans la portée lexicale de la fermeture. Cette fermeture est ensuite appelée dans le rappel setTimeout, garantissant que la valeur originale de la variable i est accessible.
<code class="javascript">for(var i = 0; i < 10; i++) { setTimeout((function(i2){ return function() { console.log(i2); } })(i), 1000); }</code>
Conclusion
Dans le code fourni, la solution de l'éditeur démontre l'utilisation correcte d'une fermeture pour capturer la valeur de la variable i. Si les deux solutions résolvent efficacement le problème du retard d'impression, seule la solution de l'éditeur est qualifiée de clôture au sens technique.
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!