Čítač s uzávěry v JavaScriptu
Přepišme námi probíraný kód
tak, aby vrácená funkce pokaždé
zvýšila hodnotu proměnné num
o jednu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // přičteme jedničku
}
}
let func = test();
Vyplývá z toho, že každé volání funkce func
vypíše do konzole novou hodnotu:
function 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
Vyšlo nám, že jsme implementovali čítač volání
funkcí pomocí uzávěru (přesněji pomocí
proměnné num z uzávěru naší funkce).
Mějte na paměti, že každé volání funkce test
vrátí novou funkci, která bude mít
svůj vlastní uzávěr. To znamená, že různé čítače
budou pracovat nezávisle:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // první čítač
func1(); //vypíše 1
func1(); //vypíše 2
let func2 = test(); // druhý čítač
func2(); //vypíše 1
func2(); //vypíše 2
Vychází nám, že stejná proměnná num
bude pro různé funkce mít různou hodnotu!
To znamená, že pokud funkci test
zavoláme dvakrát, pak z ní získané funkce budou
fungovat nezávisle a každá z
těchto funkcí bude mít svou nezávislou
proměnnou num.
Samostatně, bez nahlížení do mého kódu, implementujte čítač volání funkce, fungující na uzávěrech.
Nechť funkce v uzávěru uchovává číslo 10.
Zařiďte, aby každé volání funkce
snížilo toto číslo o 1 a vypisovalo
do konzole snížené číslo.
Upravte předchozí úlohu tak, aby
odpočet došel k 0, a poté
každé další volání funkce vypisovalo do konzole
zprávu, že odpočet byl ukončen.