Uždarosios funkcijos ir funkcijos iškartinis vykdymas JavaScript

Kaip jau žinote, galima iškart iškviesti anoniminę funkciją ir priskirti jos vykdymo rezultatą kokiam nors kintamajam:

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

console.log(result); // išves '!'

Dažnai funkciją, iškviečiamą iškart, tokiu atveju ima į apvalius skliaustus, nors to nėra būtina. Tai daroma tam, kad iš karto būtų matoma, jog funkcija kviečiama iškart:

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

console.log(result); // išves '!'

Tegu dabar iškart iškviestos funkcijos rezultatas yra anoniminė funkcija:

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

func(); // išves '!'

Padarykime taip, kad grąžinama funkcija saugotų uždarinyje kintamąjį num:

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

Jei pridėsime dar num++, tai funkcija func taps paruoštu skaitikliu:

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

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

Nežiūrėdami į mano kodą, patys įgyvendinkite tokį patį skaitiklį.

Задание 2

Modifikuokite skaitiklio veikimą taip, kad jis skaičiuotų iki 5, o tada skaičiavimas prasidėtų iš naujo.