Čítač na uzávierkach v JavaScripte

Prepíšme kód, ktorý sme skúmali, tak, aby vrátená funkcia zakaždým zväčšila hodnotu premennej num o jednu:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++; // pripočítame jednu
  }
}

let func = test();

Výsledkom bude, že každé volanie funkcie func vypíše do konzoly novú hodnotu:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  }
}

let func = test();

func(); //vypíše 1
func(); //vypíše 2
func(); //vypíše 3
func(); //vypíše 4
func(); //vypíše 5

Výsledkom je, že sme implementovali čítač volania funkcií pomocou uzávierky (presnejšie pomocou premennej num z uzávierky našej funkcie).

Majte na pamäti, že každé volanie funkcie test vráti novú funkciu, ktorá bude mať svoju vlastnú uzávierku. To znamená, že rôzne čítače budú pracovať nezávisle:

javascriptfunction test() {
  let num = 1;
  
  return function() {
    console.log(num);
    num++;
  };
}

let func1 = test(); // prvý čítač
func1();  //vypíše 1
func1();  //vypíše 2

let func2 = test(); // druhý čítač
func2();  //vypíše 1
func2();  //vypíše 2

Výsledkom je, že tá istá premenná num pre rôzne funkcie bude mať rôznu hodnotu!

To znamená, že ak zavoláme funkciu test dvakrát, funkcie z nej získane budú pracovať nezávisle a každá z týchto funkcií bude mať svoju nezávislú premennú num.

Задание 1

Samostatne, bez nahliadania do môjho kódu, implementujte čítač volania funkcie, pracujúci na uzávierkach.

Задание 2

Nech funkcia v uzávierke uchováva číslo 10. Zaistite, aby každé volanie funkcie znížilo toto číslo o 1 a vypísalo do konzoly znížené číslo.

Задание 3

Upravte predchádzajúcu úlohu tak, aby odpočítavanie dosiahlo 0, a potom každé nasledujúce volanie funkcie vypísalo do konzoly správu, že odpočítavanie je ukončené.