ფუნქცია, რომელიც აბრუნებს ფუნქციას 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.
იპოვეთ ამ ფუნქციების შედეგების ჯამი.