递归


//递归
function factorial(num){
   if(num<1) return 1;
   else return  num*factorial(num-1);
}

//factorial(4);


var anotherFactorial = factorial;
factorial = null;

anotherFactorial(4);

运行以上将会出错,因为递归内部的原因,factorial已经指向了空,改为一下就可以了使用arguments.callee()

arguments.callee();函数代表正在执行的函数的指针


//递归
function factorial(num){
   if(num<1) return 1;
   else return  num*arguments.callee(num-1);
}

//factorial(4);


var anotherFactorial = factorial;
factorial = null;

anotherFactorial(4);

因此可以通过arguments.callee()而不是函数名来调用,这样可以确保函数的不出问题,但是只能用于非严格模式

 

对于严格模式的情况可以使用命名函数表达式来达到相同的结果:

var factorial = (function f(num){

      if(num<1) return 1;
      else return num * f(num-1);
});
var anotherFactorial = factorial;
factorial = null;

anotherFactorial(4);

 

posted @ 2014-08-04 14:01  跛脚前行,从心开始  阅读(129)  评论(0编辑  收藏  举报