Funktion som returnerar en funktion i JavaScript

Låt oss säga att vi har en funktion som returnerar en sträng:

javascriptfunction 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:

javascriptfunction 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:

javascriptfunction 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:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

console.log( func()() ); // skriver ut '!'
Задание 1

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.