ฉันสามารถสร้างฟังก์ชันวนซ้ำในตัวแปรดังนี้:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
ด้วยวิธีนี้จะส่งออกfunctionHolder(3);
3
2
1
0
สมมติว่าฉันทำสิ่งต่อไปนี้:
var copyFunction = functionHolder;
copyFunction(3);
จะแสดงผลลัพธ์3
2
1
0
ตามด้านบน ถ้าฉันเปลี่ยนแล้วfunctionHolder
ดังนี้:
functionHolder = function(whatever) {
output("Stop counting!");
จากนั้นfunctionHolder(3);
จะให้Stop counting!
ตามที่คาดไว้
copyFunction(3);
ตอนนี้ให้3
Stop counting!
ตามที่อ้างถึงfunctionHolder
ไม่ใช่ฟังก์ชัน (ที่ตัวเองชี้ไป) สิ่งนี้อาจเป็นที่พึงปรารถนาในบางสถานการณ์ แต่มีวิธีเขียนฟังก์ชันเพื่อให้เรียกตัวเองมากกว่าตัวแปรที่เก็บไว้หรือไม่?
นั่นคือเป็นไปได้ไหมที่จะเปลี่ยนเฉพาะสายfunctionHolder(counter-1);
เพื่อให้ทำตามขั้นตอนทั้งหมดนี้ยังคงให้3
2
1
0
เมื่อเราโทรcopyFunction(3);
? ฉันพยายามแต่ที่ทำให้ผมเกิดข้อผิดพลาดthis(counter-1);
this is not a function