Funktsioon, mis tagastab funktsiooni JavaScriptis

Olgu meil selline funktsioon, mis tagastab stringi:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // kuvab '!'

Tagastame nüüd analoogia põhjal stringi asemel anonüümse funktsiooni:

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

let result = func(); // muutuja result sisu on funktsioon
console.log(result); // kuvab 'function() {return '!';}'

Nagu näete, on muutuja result nüüd funktsioon. Väljutame konsooli tema töö tulemuse. Kirjutame selleks talle ümarsulud:

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

let result = func();
console.log( result() ); // kuvab '!'

Kuna func() kutsumine tagastab funktsiooni, siis võime kohe ka kutsuda seda tagastatud funktsiooni, niimoodi: func()() - esimesed ümarsulud saavad funktsiooni func tulemuse (mis ise on funktsioon), ja teised ümarsulud rakenduvad func tulemusele.

Proovime:

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

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

Tehke funktsioon func1, mis olles kutsutud niimoodi: func1()(), tagastab numbri 1. Tehke analoogiline funktsioon func2, mis tagastab numbri 2. Leidke nende funktsioonide tulemuste summa.