Функција која враћа функцију у 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. Пронађите збир резултата ових функција.