Funkcja zwracająca funkcję w JavaScript

Załóżmy, że mamy taką funkcję zwracającą ciąg znaków:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // wyświetli '!'

Teraz zamiast ciągu znaków, analogicznie, zwróćmy funkcję anonimową:

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

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

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

console.log( func()() ); // wyświetli '!'
Задание 1

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.