Zárások és azonnali függvényhívás a JavaScriptben

Ahogy már tudod, lehetséges egy névtelen függvényt azonnal meghívni és a működés eredményét valamilyen változónak értékül adni:

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

console.log(result); // kiírja '!'

Az azonnal meghívott függvényt gyakran zárójelek közé teszik ilyen esetben, bár erre nincs szükség. Ezt azért teszik, hogy azonnal látszódjon, a függvény azonnal meghívódik:

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

console.log(result); // kiírja '!'

Tegyük most fel, hogy az azonnal meghívott függvény eredménye egy névtelen függvény legyen:

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

func(); // kiírja '!'

Tegyük úgy, hogy a visszaadott függvény egy num változót tartalmazzon a zárásában:

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

Ha hozzáadunk egy num++-t, akkor a func függvény kész számlálóvá válik:

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

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

Ne kukkolj az én kódomba, implementáld önállóan ugyanezt a számlálót.

Задание 2

Módosítsd a számláló működését úgy, hogy 5-ig számoljon, majd onnan kezdje előről a számlálást.