Closure och omedelbar funktionsanvändning i JavaScript

Som du redan vet är det möjligt att anropa en anonym funktion omedelbart och tilldela resultatet av operationen till någon variabel:

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

console.log(result); // skriver ut '!'

Ofta sätts funktionen som anropas omedelbart i sådana fall inom parenteser, även om det inte är nödvändigt. Detta görs för att det genast ska vara synligt att funktionen anropas omedelbart:

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

console.log(result); // skriver ut '!'

Låt nu resultatet av den omedelbart anropade funktionen vara en anonym funktion:

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

func(); // skriver ut '!'

Låt oss göra så att den returnerade funktionen lagrar variabeln num i ett closure:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
  }
})();

Om man lägger till num++, så blir funktionen func en färdig räknare:

javascriptlet func = (function() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
})();

func(); //skriver ut 1
func(); //skriver ut 2
func(); //skriver ut 3
func(); //skriver ut 4
func(); //skriver ut 5
Задание 1

Utan att kolla på min kod, implementera en sådan räknare på egen hand.

Задание 2

Modifiera räknarens funktion så att den räknar till 5, och sedan börjar omräkningen om från början.