Функција што враќа функција во 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. Пронајдете го збирот на резултатите од овие функции.