Функция, връщаща функция в JavaScript

Нека имаме следната функция, която връща низ:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // ще изведе '!'

Сега, по аналогия, вместо низ, нека върнем анонимна функция:

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

let result = func(); // в променливата result ще има функция
console.log(result); // ще изведе 'function() {return '!';}'

Както виждате, променливата result сега представлява функция. Нека изведем в конзолата резултата от нейното изпълнение. За целта ще ѝ поставим кръгли скоби:

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

let result = func();
console.log( result() ); // ще изведе '!'

Тъй като извикването на func() връща функция, можем веднага да извикаме и върнатата функция, ето така: func()() - първите кръгли скоби получават резултата от функцията func (който сам по себе си е функция), а вторите кръгли скоби се прилагат към резултата от func.

Нека опитаме:

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

console.log( func()() ); // ще изведе '!'
Задание 1

Направете функция func1, която при извикване по следния начин: func1()(), да върне числото 1. Направете подобна функция func2, която връща числото 2. Намерете сумата от резултатите на тези функции.