ฉันสามารถสร้างฟังก์ชันวนซ้ำในตัวแปรดังนี้:
/* 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