ฟังก์ชันที่ส่งคืนฟังก์ชันใน JavaScript

สมมติว่าเรามีฟังก์ชันที่ส่งคืน สตริงแบบนี้:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // จะแสดง '!'

ทีนี้ลองแทนที่จะเป็นสตริง โดย analogy, ส่งคืนฟังก์ชันแบบไม่มีชื่อ (anonymous function):

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 หาผลรวมของผลลัพธ์จากฟังก์ชันเหล่านี้