Uzávěry a okamžité volání funkcí v JavaScriptu
Jak již víte, je možné anonymní funkci zavolat okamžitě a výsledek její práce přiřadit nějaké proměnné:
let result = function() {
return '!';
}();
console.log(result); // vypíše '!'
Funkci, která se volá okamžitě, se v takovém případě často bere do kulatých závorek, i když to není nutné. Dělá se to proto, aby bylo ihned vidět, že se funkce volá okamžitě:
let result = (function() {
return '!';
})();
console.log(result); // vypíše '!'
Nechť je nyní výsledkem okamžitě volané funkce anonymní funkce:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // vypíše '!'
Udělejme to tak, aby vrácená funkce
uchovávala v uzávěru proměnnou num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Pokud přidáme ještě num++, stane se funkce
func hotovým čítačem:
let 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
Bez nahlížení do mého kódu samostatně implementujte stejný čítač.
Upravte činnost čítače tak, aby
počítal do 5 a poté se počítání začalo
znovu.