Funcție care returnează o funcție în JavaScript

Să presupunem că avem următoarea funcție care returnează un șir de caractere:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // va afișa '!'

Acum, în loc de șir de caractere, prin analogie, să returnăm o funcție anonimă:

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

let result = func(); // în variabila result va fi o funcție
console.log(result); // va afișa 'function() {return '!';}'

După cum vedeți, variabila result acum reprezintă o funcție. Să afișăm în consolă rezultatul ei. Pentru aceasta, vom folosi paranteze rotunde:

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

let result = func();
console.log( result() ); // va afișa '!'

Deoarece apelul func() returnează o funcție, putem să apelăm imediat această funcție returnată, astfel: func()() - primele paranteze rotunde obțin rezultatul funcției func (care este însăși o funcție), iar cele de-a doua paranteze rotunde se aplică rezultatului func.

Să încercăm:

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

console.log( func()() ); // va afișa '!'
Задание 1

Creați o funcție func1 care, atunci când este apelată astfel: func1()(), să returneze numărul 1. Creați o funcție similară func2, care returnează numărul 2. Găsiți suma rezultatelor acestor funcții.