Функция, возвращающая функцию в 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. Найдите сумму результатов этих функций.