Funkcja zwracająca funkcję w JavaScript
Załóżmy, że mamy taką funkcję zwracającą ciąg znaków:
function func() {
return '!';
}
let result = func();
console.log(result); // wyświetli '!'
Teraz zamiast ciągu znaków, analogicznie, zwróćmy funkcję anonimową:
function func() {
return function() {
return '!';
};
}
let result = func(); // w zmiennej result będzie funkcja
console.log(result); // wyświetli 'function() {return '!';}'
Jak widać, zmienna result teraz
reprezentuje funkcję. Wyświetlmy w
konsoli wynik jej działania. Aby to zrobić,
dodajmy do niej okrągłe nawiasy:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // wyświetli '!'
Ponieważ wywołanie func() zwraca funkcję,
możemy od razu wywołać tę zwróconą
funkcję, w ten sposób: func()() - pierwsze
okrągłe nawiasy otrzymują wynik funkcji
func (który sam jest funkcją),
a drugie okrągłe nawiasy są aplikowane do wyniku
func.
Spróbujmy:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // wyświetli '!'
Stwórz funkcję func1, która będąc
wywołana w ten sposób: func1()(), zwróci
liczbę 1. Stwórz analogiczną funkcję
func2, zwracającą liczbę 2.
Znajdź sumę wyników tych funkcji.