Funkcija koja vraća funkciju u JavaScript-u

Recimo da imamo ovakvu funkciju koja vraća string:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // ispisaće '!'

Sada, po analogiji, umesto stringa, hajde da vratimo anonimnu funkciju:

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

let result = func(); // u promenljivoj result će biti funkcija
console.log(result); // ispisaće 'function() {return '!';}'

Kao što vidite, promenljiva result sada predstavlja funkciju. Hajde da ispišemo u konzolu rezultat njenog rada. Da bismo to uradili, napišimo joj okrugle zagrade:

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

let result = func();
console.log( result() ); // ispisaće '!'

Pošto poziv func() vraća funkciju, možemo odmah i pozvati tu vraćenu funkciju, ovako: func()() - prve okrugle zagrade dobijaju rezultat funkcije func (koji je sam po sebi funkcija), a druge okrugle zagrade primenjuju se na rezultat func.

Hajde da probamo:

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

console.log( func()() ); // ispisaće '!'
Задание 1

Napravite funkciju func1, tako da kada se pozove ovako: func1()(), vrati broj 1. Napravite sličnu funkciju func2, koja vraća broj 2. Pronađite zbir rezultata ovih funkcija.