Fermetures en JavaScript
En JavaScript, la fonction est un bloc de code conçu pour effectuer une tâche spécifique. Il s'exécute lorsque vous l'invoquez.
Par exemple:
function myFunction(message){
console.log(message)
}
myFunction("Hello there!!")
myFunction("Welcome, boss")
Mais que se passe-t-il si nous voulons savoir ce qui s'est passé lors de la première ou de la précédente exécution. C'est là que les fermetures arrivent.
Qu'est-ce que les Fermetures ?
En termes simples, lorsqu'une fonction renvoie une autre fonction qui a accès à la portée de ses fonctions externes, on parle de fermetures en JavaScript.
Par exemple:
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
function inner (){
counter++;
return counter;
}
Donc, d'une manière ou d'une autre, JavaScript se souvient de la countervaleur précédente et effectue une opération mathématique.
Vous vous demandez peut-être comment Js fait ça ?
Lorsqu'une fonction renvoie une fonction, elle ne renvoie pas seulement la fonction, elle renvoie également la portée lexicale de cette fonction. Toutes ces variables , les données liées à cette fonction renvoyée en tant que propriété cachée avec cette fonction renvoyée. Cette propriété cachée aussi appeléeBackpack
Ce sac à dos porte plusieurs noms :
- Fermé sur 'Variable Environment' (COVE)
- Données référencées à portée lexicale persistante (PLSRD)
- Sac à dos
- Fermeture
Examinons un autre exemple :
function outer (){
let counter = 0;
function inner (){
counter++;
return counter;
}
return inner
}
const result = outer()
result() // 1
result() // 2
const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2
Pourquoi les fermetures :
- Cela nous aide à créer une fonction d'assistance qui active des fonctions puissantes comme Once et Memoize.
- Nous aide à créer des itérateurs et des générateurs en utilisant la portée lexicale et les fermetures.
- De nombreux modèles de conception JavaScript, y compris le modèle de module, utilisent la fermeture, en préservant l'état d'une application sans polluer l'espace de noms global.
- Les rappels et les promesses s'appuient sur les fermetures pour conserver l'état dans le monde JavaScript asynchrone.
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































