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