Question :
Dans une discussion sur les fermetures en JavaScript, un ami a affirmé que leur mise en œuvre manquait de fermetures, tandis que l'autre affirmait le contraire. Pouvez-vous déterminer quelle solution utilise des fermetures en appliquant le concept de fermetures ?
Solution :
Définition de fermeture : Une fermeture en JavaScript fait référence à un sous-ensemble de fonctions avec des variables libres (variables définies dans une portée parent) référencées à partir d'une portée différente. Lorsqu'une fermeture est référencée en dehors de sa portée parent, elle se ferme sur la valeur positive (la variable libre) de cette portée.
Cas 1 : le programme de votre ami
<code class="js">for (var i = 0; i < 10; i++) { (function f() { var i2 = i; setTimeout(function g() { console.log(i2); }, 1000); })(); }</code>
Analyse :
Cas 2 : Votre programme
<code class="js">for (var i = 0; i < 10; i++) { setTimeout((function f(i2) { return function g() { console.log(i2); }; })(i), 1000); }</code>
Analyse :
Conclusion :
Vous et votre ami utilisez des fermetures dans vos implémentations. La différence est que dans le programme de votre ami, la fermeture est créée dans la fonction interne g, tandis que dans votre programme, la fermeture est créée dans la fonction externe f.
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!