Funkcija, grąžinanti funkciją JavaScript
Tarkime, kad turime tokią funkciją, grąžinančią eilutę:
function func() {
return '!';
}
let result = func();
console.log(result); // išvests '!'
Dabar, pagal analogiją, vietoj eilutės grąžinkime anoniminę funkciją:
function func() {
return function() {
return '!';
};
}
let result = func(); // kintamajame result bus funkcija
console.log(result); // išvests 'function() {return '!';}'
Kaip matote, kintamasis result dabar
reiškia funkciją. Išveskime į konsolę
jos veikimo rezultatą. Norėdami tai padaryti, parašykime
jai apvalius skliaustus:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // išvests '!'
Kadangi iškvietimas func() grąžina funkciją,
taip mes galime nedelsiant iškviesti šią grąžintą
funkciją, štai taip: func()() - pirmieji
apvalūs skliaustai gauna funkcijos
func rezultatą (kuris pats yra funkcija),
o antrieji apvalūs skliaustai taikomi rezultatui
func.
Pabandykime:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // išvests '!'
Sukurkite funkciją func1, kuri būdama
iškviesta štai taip: func1()(), grąžintų
skaičių 1. Sukurkite analogišką funkciją
func2, grąžinančią skaičių 2.
Raskite šių funkcijų rezultatų sumą.