Funkce vracející funkci v JavaScriptu
Předpokládejme, že máme tuto funkci, která vrací řetězec:
function func() {
return '!';
}
let result = func();
console.log(result); // vypíše '!'
Nyní místo řetězce, analogicky, vraťme anonymní funkci:
function func() {
return function() {
return '!';
};
}
let result = func(); // v proměnné result bude funkce
console.log(result); // vypíše 'function() {return '!';}'
Jak vidíte, proměnná result nyní
představuje funkci. Vypišme do
konzole výsledek jejího volání. Pro tento účel napíšeme
kulaté závorky:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // vypíše '!'
Protože volání func() vrací funkci,
můžeme tuto vrácenou funkci okamžitě zavolat,
takto: func()() - první
kulaté závorky získají výsledek funkce
func (který sám je funkcí),
a druhé kulaté závorky jsou aplikovány na výsledek
func.
Zkusme to:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // vypíše '!'
Vytvořte funkci func1, která když bude
zavolána takto: func1()(), vrátí
číslo 1. Vytvořte podobnou funkci
func2, vracející číslo 2.
Najděte součet výsledků těchto funkcí.