javascript递归整理

338 阅读1分钟

普通递归

var factorial =function(num){
        if(num<=1){
            return 1
        }else{
            return num*factorial(num-1)
        }
    }
console.log(factorial(6));//720
var copy=factorail;
factorail=null;
console.log(copy(6))//factorail is not defined
  • 普通递归会造成 指向这个函数的只有copy,factorail被设置成了空。

改进递归

var factorial =function(num){
        if(num<=1){
            return 1
        }else{
            return num*arguments.callee(num-1)
        }
    }
console.log(factorial(6));
var copy=factorial;
factorial=null;
console.log(factorial);
console.log(copy(6));
  • 这样函数就可以随便用了,试了下IE8也有用......,'use strict'模式下,报错。

终极递归(命名函数表达式)

var factorial =(function gg(num){
        if(num<=1){
            return 1
        }else{
            return num*gg(num-1)
        }
    }
)
console.log(factorial(6));
var copy=factorial;
factorial=null;
console.log(factorial);
console.log(copy(6));
  • 其实就是把gg给保护了起来。