Closure og omgående funktionskald i JavaScript

Som du allerede ved, kan du kalde en anonym funktion omgående og tildele resultatet af kørslen til en variabel:

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

console.log(result); // vil udskrive '!'

Ofte sættes funktionen, der kaldes omgående, i sådanne tilfælde i parenteser, selvom det ikke er nødvendigt. Dette gøres for, at det umiddelbart skal være synligt, at funktionen kaldes omgående:

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

console.log(result); // vil udskrive '!'

Lad nu resultatet af den omgående kaldte funktion være en anonym funktion:

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

func(); // vil udskrive '!'

Lad os gøre det sådan, at den returnerede funktion gemmer variablen num i et closure:

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

Hvis man tilføjer num++, så bliver funktionen func en færdig tæller:

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

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

Uden at kigge på min kode, skal du selv implementere en sådan tæller.

Задание 2

Modificer tælleren, så den tæller til 5, og derefter starter optællingen forfra.