JavaScriptLeçon 12 sur 16

Closures (fermetures)

Une fonction JavaScript se souvient des variables de l’endroit où elle a été créée, même quand la fonction extérieure a fini. C’est une closure, ou fermeture : une façon de donner à une fonction sa mémoire privée.

L’essentiel

  • Une fonction intérieure voit les variables de la fonction extérieure et en garde l’accès
  • Chaque appel de la fonction extérieure crée une mémoire nouvelle et séparée
  • Le code extérieur ne peut pas atteindre ces variables : les données restent privées
  • Une fabrique de fonctions : makeGreeter("Hello") renvoie une fonction de salutation toute prête
  • Compteurs, caches, once() et gestionnaires d’événements reposent sur les closures

Exemple

function createCounter() {  let count = 0;  return () => {    count += 1;    return count;  };} const next = createCounter();console.log(next(), next(), next()); const other = createCounter();console.log(other()); const makeGreeter = (greeting) => (name) => `${greeting}, ${name}!`;const hello = makeGreeter("Hello");console.log(hello("Max"));

next se souvient de son propre count et l’augmente à chaque appel. other a été créé à part, il a donc commencé à 1. makeGreeter a renvoyé une fonction qui a retenu le mot Hello.

Exercice

Utiliser l’éditeur⌘ Entrée ou Ctrl Entrée lance le code, ⇧ ⌘ Entrée vérifie l’exercice.Tab et Maj Tab indentent la ligne ou la sélection ; Échap puis Tab quitte l’éditeur.La vérification compare ce que le programme a affiché à l’exercice ; les espaces en fin de ligne ne comptent pas.Après deux vérifications ratées, la solution s’ouvre. Votre code reste dans ce navigateur.

Terminez la tirelire : add(amount) ajoute la somme à balance et renvoie le nouveau solde, total() renvoie balance. Écrivez ensuite once(fn) : elle renvoie une fonction qui ne lance fn que la première fois. Sortie : Mia: 20, Leo: 3 et From outside: undefined.

Sortie

Ce que le programme affiche apparaîtra ici.