ფუნქცია, რომელიც აბრუნებს ფუნქციას JavaScript-ში

დავუშვათ, გვაქვს ასეთი ფუნქცია, რომელიც აბრუნებს სტრიქონს:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // გამოიტანს '!'

ახლა კი, ანალოგიით, სტრიქონის ნაცვლად, დავაბრუნოთ ანონიმური ფუნქცია:

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

let result = func(); // result ცვლადში იქნება ფუნქცია
console.log(result); // გამოიტანს 'function() {return '!';}'

როგორც ხედავთ, result ცვლადი ახლა წარმოადგენს ფუნქციას. მოდით გამოვიტანოთ კონსოლში მისი მუშაობის შედეგი. ამისთვის დავწეროთ მრგვალი ფრჩხილები:

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

let result = func();
console.log( result() ); // გამოიტანს '!'

რადგან func()-ის გამოძახება აბრუნებს ფუნქციას, ჩვენ შეგვიძლია დაუყოვნებლივ გამოვიძახოთ ეს დაბრუნებული ფუნქცია, ასე: func()() - პირველი მრგვალი ფრჩხილები იღებენ ფუნქციის func შედეგს (რომელიც თავად არის ფუნქცია), ხოლო მეორე მრგვალი ფრჩხილები ექვემდებარება func-ის შედეგს.

მოდით ვცადოთ:

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

console.log( func()() ); // გამოიტანს '!'
Задание 1

შექმენით ფუნქცია func1, რომელიც გამოძახებული ასე: func1()(), დააბრუნებს რიცხვს 1. შექმენით მსგავსი ფუნქცია func2, რომელიც აბრუნებს რიცხვს 2. იპოვეთ ამ ფუნქციების შედეგების ჯამი.