ฟังก์ชันที่ส่งคืนฟังก์ชันใน JavaScript
สมมติว่าเรามีฟังก์ชันที่ส่งคืน สตริงแบบนี้:
function func() {
return '!';
}
let result = func();
console.log(result); // จะแสดง '!'
ทีนี้ลองแทนที่จะเป็นสตริง โดย analogy, ส่งคืนฟังก์ชันแบบไม่มีชื่อ (anonymous function):
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
หาผลรวมของผลลัพธ์จากฟังก์ชันเหล่านี้