Maison  >  Article  >  interface Web  >  Fermetures en JavaScript

Fermetures en JavaScript

WBOY
WBOYoriginal
2024-09-12 10:30:02813parcourir

Closures in JavaScript

Bonjour,

Dans cet article, apprenons les Fermetures.

Les fermetures sont essentielles en JavaScript car elles permettent à une fonction d'accéder aux variables de sa portée parent, même après la fermeture de cette fonction parent. Ceci est crucial pour les fonctions qui doivent se souvenir des données au fil du temps, comme dans les fonctions de rappel ou le maintien de l'état. Un point à retenir ici est que les variables inutilisées de la portée parent sont récupérées.

Définition :
Une fermeture est la combinaison d'une fonction regroupée (enfermée) avec des références à son état environnant (l'environnement lexical). En d’autres termes, une fermeture donne à une fonction accès à sa portée externe. En JavaScript, des fermetures sont créées à chaque fois qu'une fonction est créée, au moment de la création de la fonction.

En gros les fermetures ont accès à :

  • Leur propre portée
  • La portée des fonctions externes
  • La portée mondiale

Points bonus
Portée lexicale : les fonctions internes ont accès aux variables dans la portée externe.

Comprenons avec un exemple.

Exemple

Q> Écrivez une fonction createCounter. Il doit accepter un initial entier init. Il devrait renvoyer un objet avec trois fonctions.

Les trois fonctions sont :

increment() augmente la valeur actuelle de 1 puis la renvoie.
decrement() réduit la valeur actuelle de 1 puis la renvoie.
reset() définit la valeur actuelle sur init puis la renvoie.

Voir le code commenté ci-dessous pour un exemple de cas init = 5.

Solution

var createCounter = function(init) {
    const INITIAL_VALUE = init;
    return {
        increment: () => ++init,
        decrement: () => --init,
        reset: () => init=INITIAL_VALUE,
    }
};

/**
 * const counter = createCounter(5)
 * counter.increment(); // 6
 * counter.reset(); // 5
 * counter.decrement(); // 4
 */

Explication :

  • Capturer la variable init dans sa portée lexicale.
  • Renvoi de méthodes qui peuvent accéder et modifier init même après la fin de l'exécution de createCounter.
  • Création d'un état privé et persistant (init) accessible uniquement via les méthodes renvoyées.
  • Permet la création de plusieurs compteurs indépendants, chacun avec son propre état encapsulé.

Si vous avez des doutes ou des suggestions, n'hésitez pas à ajouter des commentaires.

Cette question est tirée de leetcode. Lien

Enfin, gardez à l'esprit que les variables déclarées globalement seront accessibles à chaque fermeture d'un script.

J'espère que vous avez maintenant une bonne compréhension des fermetures. Merci d'avoir lu

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