arguments.cell的问题

arguments主要的用途是保存参数,它有个属性cell的属性,该属性是一个指针,指向拥有arguments的对象的函数。函数

通常状况下,使用递归时直接调用函数的名称,实现递归其实现的调用自身函数。
例子以下:阶乘spa

function factorial(num){
    if(num <= 1){
    return 1;
    }else{
    return num * factorial(num - 1);
    }
}
var fn = factorial;
factorial = function(){return 0;}
alert(fn(5));//结果是0
alert(factorial(5));//结果0

为何要使用arguments.callee代替函数名,为了解除这种执行函数与函数名factorial耦合在一块儿,指针

因此使用了arguments.callee,不管在后期引用函数时使用什么名字,均可以保证完成递归。code

function factorial(num){
   if(num <= 1){
    return 1;
   }else{
    return num * arguments.callee(num - 1);
   }
}
var fn =factorial;
factorial = function(){return 0;}
alert(fn(5));//120
alert(factorial(5));//0
相关文章
相关标签/搜索