Funktion som returnerar en funktion i JavaScript
Låt oss säga att vi har en funktion som returnerar en sträng:
function func() {
return '!';
}
let result = func();
console.log(result); // skriver ut '!'
Låt oss nu, i analogi, returnera en anonym funktion istället för en sträng:
function func() {
return function() {
return '!';
};
}
let result = func(); // variabeln result kommer att innehålla en funktion
console.log(result); // skriver ut 'function() {return '!';}'
Som du ser är variabeln result nu
en funktion. Låt oss skriva ut
resultatet av dess exekvering till konsolen. För att göra detta skriver vi
runda parenteser efter den:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // skriver ut '!'
Eftersom anropet func() returnerar en funktion,
kan vi omedelbart anropa den returnerade
funktionen, så här: func()() - de första
runda parenteserna hämtar resultatet av funktionen
func (som i sig är en funktion),
och de andra runda parenteserna appliceras på resultatet av
func.
Låt oss prova:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // skriver ut '!'
Skapa en funktion func1 som, när den
anropas så här: func1()(), returnerar
talet 1. Skapa en liknande funktion
func2 som returnerar talet 2.
Hitta summan av resultaten av dessa funktioner.