//递归
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);