ฉันสงสัยว่า JavaScript รองรับการเขียนฟังก์ชันภายในฟังก์ชันอื่นหรือฟังก์ชันซ้อนกัน (ฉันอ่านในบล็อก) เป็นไปได้จริงเหรอ?. อันที่จริงฉันได้ใช้สิ่งเหล่านี้ แต่ไม่แน่ใจในแนวคิดนี้ ฉันไม่ชัดเจนเกี่ยวกับเรื่องนี้ - โปรดช่วยด้วย!
ฉันสงสัยว่า JavaScript รองรับการเขียนฟังก์ชันภายในฟังก์ชันอื่นหรือฟังก์ชันซ้อนกัน (ฉันอ่านในบล็อก) เป็นไปได้จริงเหรอ?. อันที่จริงฉันได้ใช้สิ่งเหล่านี้ แต่ไม่แน่ใจในแนวคิดนี้ ฉันไม่ชัดเจนเกี่ยวกับเรื่องนี้ - โปรดช่วยด้วย!
คำตอบ:
เป็นไปได้จริงเหรอ.
ใช่.
function a(x) { // <-- function
function b(y) { // <-- inner function
return x + y; // <-- use variables from outer scope
}
return b; // <-- you can even return a function.
}
console.log(a(3)(4));
สิ่งต่อไปนี้เป็นสิ่งที่น่ารังเกียจ แต่ทำหน้าที่แสดงให้เห็นว่าคุณสามารถปฏิบัติต่อฟังก์ชันเช่นเดียวกับวัตถุประเภทอื่น ๆ ได้อย่างไร
var foo = function () { alert('default function'); }
function pickAFunction(a_or_b) {
var funcs = {
a: function () {
alert('a');
},
b: function () {
alert('b');
}
};
foo = funcs[a_or_b];
}
foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();
ฟังก์ชั่นเป็นวัตถุชั้นหนึ่งที่สามารถ:
เพื่อสร้างตามตัวอย่างที่ Kenny ให้ไว้:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
จะแจ้งเตือนคุณด้วย 5.
ใช่เป็นไปได้ที่จะเขียนและเรียกใช้ฟังก์ชันที่ซ้อนอยู่ในฟังก์ชันอื่น
ลองสิ่งนี้:
function A(){
B(); //call should be B();
function B(){
}
}
ไม่เพียง แต่คุณสามารถส่งคืนฟังก์ชันที่คุณส่งผ่านไปยังฟังก์ชันอื่นเป็นตัวแปรได้เท่านั้นคุณยังสามารถใช้เพื่อคำนวณภายใน แต่กำหนดไว้ภายนอก ดูตัวอย่างนี้:
function calculate(a,b,fn) {
var c = a * 3 + b + fn(a,b);
return c;
}
function sum(a,b) {
return a+b;
}
function product(a,b) {
return a*b;
}
document.write(calculate (10,20,sum)); //80
document.write(calculate (10,20,product)); //250