Article
Vous pouvez commencer par lire un article général sur les closures : Article sur les closuresCode
Nous pouvons examiner trois exemples de code et le résultat dans le débogueur :http://jsbin.com/xuqika/2/edit?html,js,console,output
function f(){
console.log(C);
}
f();
let C = "c";
A l'appel de la fonction C est inconnue !
{
let U = "je suis oubliée par la closure";
function f(){
console.log(C);
}
let C = "c";
} // bloc
f();
A l'appel de la fonction C est connue. Or le bloc n'est plus accessible (on ne pourrait afficher U en dehors). Cela semble magique ...
La "closure" est intelligente (elle ne garde vraiment que les variables utiles)
http://jsbin.com/xuqika/3/edit?html,js,console
Historiquement, avant l'arrivée des blocs, nous pouvions générer une closure de la façon suivante :
function A() {
let a = " a ";
function B() {
console.log (a);
}
return B;
}
let closure = A();
closure();
Le fermeture (closure) est constituée de la fonction B et de son environnement. Ainsi, l'exécution de la fonction closure permet d'atteindre la variable a.
Le comportement est surprenant car :
When you declare a variable in a function, you can access this variable only within the function. You can't get this variable once you get out of it.
Voici la vue du débogger.