JavaScript實現遞歸的三種方式,以斐波拉契數列爲例函數
1.這種方式是和其餘高級語言同樣,不過存在問題,JavaScript中函數也是對象,因此能夠指向其餘的對象。spa
function f1(num){ if(num<=1){ return 1; } return num* f1(num-1) } f(5); // 120 f11 = f1; f1 = null; f11(10) //error
2.使用arguments.callee,可是 arguments.callee在嚴格模式調用會出錯code
function f2(num){
if(num<=1){ return 1; } return num * arguments.callee(num-1) } f2(5); // 120 f21=f2; f2 = null; f21(5); // 120
3.合理的方式對象
var f3 = (function f(num){ if(num<=1){ return 1; } return num * f(num-1) }) f3(5); // 120 f31=f3; f3 = null; f31(5); //120