Funkcija, grąžinanti funkciją JavaScript

Tarkime, kad turime tokią funkciją, grąžinančią eilutę:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // išvests '!'

Dabar, pagal analogiją, vietoj eilutės grąžinkime anoniminę funkciją:

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

let result = func(); // kintamajame result bus funkcija
console.log(result); // išvests 'function() {return '!';}'

Kaip matote, kintamasis result dabar reiškia funkciją. Išveskime į konsolę jos veikimo rezultatą. Norėdami tai padaryti, parašykime jai apvalius skliaustus:

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

let result = func();
console.log( result() ); // išvests '!'

Kadangi iškvietimas func() grąžina funkciją, taip mes galime nedelsiant iškviesti šią grąžintą funkciją, štai taip: func()() - pirmieji apvalūs skliaustai gauna funkcijos func rezultatą (kuris pats yra funkcija), o antrieji apvalūs skliaustai taikomi rezultatui func.

Pabandykime:

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

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

Sukurkite funkciją func1, kuri būdama iškviesta štai taip: func1()(), grąžintų skaičių 1. Sukurkite analogišką funkciją func2, grąžinančią skaičių 2. Raskite šių funkcijų rezultatų sumą.