1. 程式人生 > >一:js高階程式設計之:遞迴

一:js高階程式設計之:遞迴

遞迴函式是在一個函式通過名字呼叫自身情況下夠成的,如:

function factorial(num){
if(num <= 1){
return 1;
}else{
return num*factorial(num-1)
}
}
這是一經典的遞迴階乘函式;表面這個函式是沒有什麼錯的,但在某種情況下會出錯:
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)
);//出錯
</pre><p><span style="background-color: rgb(240, 240, 240);">解決 的辦法是利用argumengts.callee,他是一個指向正在執行的函式指標,可以利用他來實現對函式的遞迴呼叫:</span></p><pre>
function factorial(num){
if(num <= 1){
return 1;
}else{
return num*arguments.callee(num-1);
}
}

不過這種方法在嚴格模式下,不能通過指令碼訪問argumengts.callee,會丟擲錯誤;可以使用命名函式表示式來打成相同的結果:
var factorial = (function f(num){
if(num <= 1){
return 1;
}else{
return num*f(num-1);
}
});
這種方式在嚴格和非嚴格模式下都能執行!