Funkcia vracejúca funkciu v JavaScripte
Majme napríklad takúto funkciu, ktorá vracia reťazec:
function func() {
return '!';
}
let result = func();
console.log(result); // vypíše '!'
Teraz skúsme, analogicky, namiesto reťazca vrátiť anonymnú funkciu:
function func() {
return function() {
return '!';
};
}
let result = func(); // v premennej result bude funkcia
console.log(result); // vypíše 'function() {return '!';}'
Ako vidíte, premenná result teraz
predstavuje funkciu. Skúsme vypísať
do konzoly výsledok jej volania. Napíšme
za ňu okrúhle zátvorky:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // vypíše '!'
Keďže volanie func() vracia funkciu,
môžeme túto vrátenú funkciu okamžite
aj zavolať, takto: func()() - prvé
okrúhle zátvorky získajú výsledok funkcie
func (ktorý sám je funkciou),
a druhé okrúhle zátvorky sa aplikujú na výsledok
func.
Skúsme to:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // vypíše '!'
Vytvorte funkciu func1, ktorá keď
sa zavolá takto: func1()(), vráti
číslo 1. Vytvorte analogickú funkciu
func2, vracejúcu číslo 2.
Nájdite súčet výsledkov týchto funkcií.