Ֆունկցիա, որը վերադարձնում է ֆունկցիա 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 թիվը: Գտեք այդ ֆունկցիաների արդյունքների գումարը: