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 :

javascriptlet 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 :

javascriptlet result = (function() {
  return '!';
})();

console.log(result); // affichera '!'

Supposons maintenant que le résultat de la fonction invoquée immédiatement soit une fonction anonyme :

javascriptlet func = (function() {
  return function() {
    console.log('!');
  }
})();

func(); // affichera '!'

Faisons en sorte que la fonction retournée stocke dans sa fermeture la variable num :

javascriptlet 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 :

javascriptlet 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
Задание 1

Sans regarder mon code, implémentez vous-même un compteur similaire.

Задание 2

Modifiez le fonctionnement du compteur pour qu'il compte jusqu'à 5, puis recommence à zéro.