Maison > interface Web > js tutoriel > le corps du texte

Le code JavaScript de votre ami utilise-t-il réellement des fermetures ?

Mary-Kate Olsen
Libérer: 2024-11-01 06:11:02
original
450 Les gens l'ont consulté

Is Your Friend's JavaScript Code Actually Using Closures?

Fermetures JavaScript et fonctions anonymes

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

Analyse :

  • La fonction f n'est pas une fermeture car toutes les variables libres (i, setTimeout et console) sont liées à la portée globale, et aucune d'entre elles n'est fermée over.
  • La fonction g, cependant, est une fermeture car elle se ferme sur la variable i2, qui est liée à la portée de f. Lorsque g est référencé depuis setTimeout, il conserve l'accès à i2.

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

Analyse :

  • La fonction f n'est pas une fermeture car elle n'a pas de variables libres.
  • La fonction g, cependant, est une fermeture car elle se ferme sur la variable i2, qui est liée au champ d’application de f. Lorsque g est référencé depuis setTimeout, il conserve l'accès à i2.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!