Функцыя, якая вяртае функцыю ў 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. Знайдзіце суму вынікаў гэтых функцый.