Variable locale de compteur en JavaScript
Considérons le code suivant :
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
test()(); // affichera 1
test()(); // affichera 1
Pourquoi le nombre 1 sera-t-il toujours affiché ? Pour
le comprendre, réécrivons notre code
différemment :
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
let func1 = test(); //!! première fonction
func1(); //affichera 1
let func2 = test(); //!! deuxième fonction
func2(); //affichera 1
Autrement dit, chaque appel de la fonction test
de cette manière : test()(), crée sa propre
fonction avec sa propre fermeture et appelle
immédiatement cette fonction.
Déterminez, sans exécuter le code, ce qui sera affiché dans la console :
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
func()();
func()();
func()();
Déterminez, sans exécuter le code, ce qui sera affiché dans la console :
function func() {
let num = 0;
return function() {
console.log(num);
num++;
};
}
let test = func;
test()();
test()();
test()();