Функция, връщаща функция в JavaScript
Нека имаме следната функция, която връща низ:
function func() {
return '!';
}
let result = func();
console.log(result); // ще изведе '!'
Сега, по аналогия, вместо низ, нека върнем анонимна функция:
function func() {
return function() {
return '!';
};
}
let result = func(); // в променливата result ще има функция
console.log(result); // ще изведе 'function() {return '!';}'
Както виждате, променливата result сега
представлява функция. Нека изведем в конзолата
резултата от нейното изпълнение. За целта ще ѝ
поставим кръгли скоби:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // ще изведе '!'
Тъй като извикването на func() връща функция,
можем веднага да извикаме и върнатата функция,
ето така: func()() - първите кръгли скоби
получават резултата от функцията func (който
сам по себе си е функция), а вторите кръгли скоби
се прилагат към резултата от func.
Нека опитаме:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // ще изведе '!'
Направете функция func1, която при извикване
по следния начин: func1()(), да върне
числото 1. Направете подобна функция
func2, която връща числото 2.
Намерете сумата от резултатите на тези функции.