Maison  >  Article  >  interface Web  >  Quand une fonction anonyme devient-elle une fermeture en JavaScript ?

Quand une fonction anonyme devient-elle une fermeture en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 08:05:02972parcourir

When Does an Anonymous Function Become a Closure in JavaScript?

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!

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