Lukkinger og umiddelbar funksjonskalling i JavaScript

Som du allerede vet, er det mulig å kalle en anonym funksjon umiddelbart og tildele resultatet av operasjonen til en variabel:

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

console.log(result); // vil skrive ut '!'

Ofte settes funksjonen som kalles umiddelbart, i slike tilfeller inn i parenteser, selv om det ikke er nødvendig. Dette gjøres for at det umiddelbart skal være synlig at funksjonen kalles på stedet:

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

console.log(result); // vil skrive ut '!'

La nå resultatet av den umiddelbart kalte funksjonen være en anonym funksjon:

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

func(); // vil skrive ut '!'

La oss gjøre det slik at den returnerte funksjonen lagrer variabelen num i lukkingen:

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

Hvis du legger til num++, vil funksjonen func bli en ferdig teller:

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

Uten å kikke på koden min, implementer en slik teller selvstendig.

Задание 2

Modifiser telleren slik at den teller til 5, og deretter starter tellingen på nytt.