Funcție care returnează o funcție în JavaScript
Să presupunem că avem următoarea funcție care returnează un șir de caractere:
function 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ă:
function 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:
function 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:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // va afișa '!'
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.