Fermetures et invocation de fonction immédiate en JavaScript
Comme vous le savez déjà, il est possible d'appeler une fonction anonyme immédiatement et d'assigner le résultat de son exécution à une variable :
let result = function() {
return '!';
}();
console.log(result); // affichera '!'
Souvent, la fonction invoquée immédiatement est placée dans des parenthèses, bien que ce ne soit pas nécessaire. Ceci est fait pour qu'il soit immédiatement visible que la fonction est appelée sur place :
let result = (function() {
return '!';
})();
console.log(result); // affichera '!'
Supposons maintenant que le résultat de la fonction invoquée immédiatement soit une fonction anonyme :
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // affichera '!'
Faisons en sorte que la fonction retournée
stocke dans sa fermeture la variable num :
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Si on ajoute un num++, alors la fonction
func deviendra un compteur prêt à l'emploi :
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); //affichera 1
func(); //affichera 2
func(); //affichera 3
func(); //affichera 4
func(); //affichera 5
Sans regarder mon code, implémentez vous-même un compteur similaire.
Modifiez le fonctionnement du compteur pour
qu'il compte jusqu'à 5, puis recommence
à zéro.