Kazi inayorudisha kazi katika JavaScript
Hebu tuwe na kazi kama hii inayorudisha mfuatano:
function func() {
return '!';
}
let result = func();
console.log(result); // itatoa '!'
Sasa badala ya mfuatano, kwa mfano huo huo, turudishe kazi isiyojulikana:
function func() {
return function() {
return '!';
};
}
let result = func(); // kwenye kibadilishaji result kutakuwa na kazi
console.log(result); // itatoa 'function() {return '!';}'
Kama unavyoona, kibadilishaji result sasa
inawakilisha kazi. Hebu tuonyeshe kwenye
console matokeo ya kazi yake. Ili kufanya hivyo andika
mabano yake ya duara:
function func() {
return function() {
return '!';
};
}
let result = func();
console.log( result() ); // itatoa '!'
Kwa kuwa wito func() unarudisha kazi,
basi tunaweza mara moja kuita hiyo kazi
iliyorudishwa, hivi: func()() - mabano
ya kwanza ya duara hupata matokeo ya kazi
func (ambayo yenyewe ni kazi),
na mabano ya pili ya duara hutumika kwa matokeo ya
func.
Hebu tujaribu:
function func() {
return function() {
return '!';
};
}
console.log( func()() ); // itatoa '!'
Fanya kazi func1, ambayo ikiitwa
hivi: func1()(), itarudisha
nambari 1. Fanya kazi sawa
func2, inayorudisha nambari 2.
Tafuta jumla ya matokeo ya kazi hizi.