js遞歸調用
1 function fact(num) { 2 if (num <= 1) { 3 return 1; 4 } else { 5 return num * fact(num - 1); 6 } 7 }
以下代碼可導致出錯:
1 var anotherFact = fact; 2 fact = null; 3 alert(antherFact(4)); //出錯
由於fact已經不是函數了,所以出錯。
用arguments.callee可解決問題,這是一個指向正在執行的函數的指針,arguments.callee返回正在被執行的對現象。
新的函數為:
1 function fact(num) { 2 if (num <= 1) { 3 return 1; 4 } else { 5 return num * arguments.callee(num - 1); //此處更改了。 6 } 7 } 8 var anotherFact = fact; 9 fact = null; 10 alert(antherFact(4)); //結果為24.
程序員的基礎教程:菜鳥程序員