Uzávěry a okamžité volanie funkcie v JavaScripte

Ako už viete, anonymnú funkciu je možné zavolať okamžite a výsledok jej práce priradiť nejakej premennej:

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

console.log(result); // vypíše '!'

Funkciu, ktorá sa volá okamžite, sa v takomto prípade často berie do okrúhlych zátvoriek, hoci to nie je nutné. Robí sa to preto, aby bolo hneď vidieť, že funkcia sa volá na mieste:

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

console.log(result); // vypíše '!'

Nech je teraz výsledkom okamžite volanej funkcie anonymná funkcia:

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

func(); // vypíše '!'

Urobme to tak, aby vrátená funkcia ukladala v uzávěre premennú num:

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

Ak pridáme ešte num++, funkcia func sa stane hotovým počítadlom:

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

func(); // vypíše 1
func(); // vypíše 2
func(); // vypíše 3
func(); // vypíše 4
func(); // vypíše 5
Задание 1

Bez nahliadania do môjho kódu samostatne implementujte také isté počítadlo.

Задание 2

Upravte prácu počítadla tak, aby počítalo do 5 a potom sa počítanie začalo odznova.