Maison >interface Web >js tutoriel >Comprendre les fermetures en JavaScript : de la confusion à la clarté
Vous travaillez sur un projet et vous avez besoin d'une fonction pour « mémoriser » les valeurs des variables, même une fois l'exécution de la fonction terminée. Les fermetures sont comme un sac à dos magique qui vous permet de transporter les connaissances d'une leçon précédente partout où vous allez dans votre code. C’est l’un des concepts JavaScript les plus puissants mais les plus mal compris. Mais ne vous inquiétez pas : à la fin de ce guide, les fermetures passeront du stade de casse-tête à « aha ! »
Une fermeture se produit lorsqu'une fonction "se souvient" de son état environnant (les variables dans sa portée) même après que la fonction externe a fini de s'exécuter. Décomposons cela avec une analogie pertinente :
Imaginez que vous êtes étudiant. Vous avez un sac à dos avec vos notes, stylos et livres. Vous quittez la salle de classe (votre fonction extérieure), mais vous avez toujours accès à tout ce qui se trouve dans votre sac à dos (votre fermeture). Chaque fois que vous aurez besoin de résoudre un problème plus tard, vous pourrez récupérer les connaissances que vous avez enregistrées dans votre sac à dos.
En JavaScript, les fermetures se produisent lorsque :
Voyons les fermetures en action avec des exemples de code.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
Que se passe-t-il ici ?
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
Que se passe-t-il ici ?
Les fermetures font souvent trébucher les développeurs lorsqu'elles sont utilisées dans des boucles.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
Pourquoi cela fonctionne-t-il ?
? Documentation : Fermetures sur MDN
Les fermetures ne sont pas seulement un concept théorique : elles sont incroyablement pratiques ! Voici quelques scénarios courants dans lesquels les fermetures brillent.
Les fermetures peuvent stocker des valeurs calculées pour les réutiliser, économisant ainsi du temps et des ressources.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
Les fermetures sont souvent utilisées dans les écouteurs d'événements pour maintenir l'état.
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
Vous pouvez utiliser des fermetures pour créer des variables privées, encapsulant des fonctionnalités.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
Les fermetures permettent de :
Les fermetures sont comme un couteau suisse en JavaScript. Que vous mettiez en cache des données, gériez des événements ou créiez des variables privées, les fermetures vous offrent un moyen puissant de gérer l'état de vos applications.
Votre défi : essayez d'utiliser des fermetures dans un petit projet, comme construire un simple compteur ou créer un mécanisme de mise en cache. Vous serez étonné de voir à quel point les fermetures de contrôle vous offrent !
Si vous avez apprécié cet article, pensez à soutenir mon travail :
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!