Funkce vracející funkci v JavaScriptu

Předpokládejme, že máme tuto funkci, která vrací řetězec:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // vypíše '!'

Nyní místo řetězce, analogicky, vraťme anonymní funkci:

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

let result = func(); // v proměnné result bude funkce
console.log(result); // vypíše 'function() {return '!';}'

Jak vidíte, proměnná result nyní představuje funkci. Vypišme do konzole výsledek jejího volání. Pro tento účel napíšeme kulaté závorky:

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

let result = func();
console.log( result() ); // vypíše '!'

Protože volání func() vrací funkci, můžeme tuto vrácenou funkci okamžitě zavolat, takto: func()() - první kulaté závorky získají výsledek funkce func (který sám je funkcí), a druhé kulaté závorky jsou aplikovány na výsledek func.

Zkusme to:

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

console.log( func()() ); // vypíše '!'
Задание 1

Vytvořte funkci func1, která když bude zavolána takto: func1()(), vrátí číslo 1. Vytvořte podobnou funkci func2, vracející číslo 2. Najděte součet výsledků těchto funkcí.