Funkcija, ki vrača funkcijo v JavaScript

Recimo, da imamo tukaj takšno funkcijo, ki vrača niz:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // izpiše '!'

Poglejmo zdaj namesto niza, po analogiji, vrnimo anonimno funkcijo:

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

let result = func(); // v spremenljivki result bo funkcija
console.log(result); // izpiše 'function() {return '!';}'

Kot vidite, spremenljivka result zdaj predstavlja funkcijo. Izpišimo v konzolo rezultat njenega delovanja. Za to napišimo ji okrogle oklepaje:

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

let result = func();
console.log( result() ); // izpiše '!'

Ker klic func() vrne funkcijo, potem lahko takoj tudi pokličemo to vrnjeno funkcijo, takole: func()() - prvi okrogli oklepaji pridobijo rezultat funkcije func (ki je sam funkcija), drugi okrogli oklepaji pa se uporabijo za rezultat func.

Poskusimo:

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

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

Naredite funkcijo func1, ki bo ob klicu takole: func1()(), vrnila število 1. Naredite podobno funkcijo func2, ki vrne število 2. Poiščite vsoto rezultatov teh funkcij.