JavaScript实现递归的三种方式,以斐波拉契数列为例
1.这种方式是和其他高级语言一样,不过存在问题,JavaScript中函数也是对象,所以可以指向其他的对象。
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在严格模式调用会出错
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