arguments.cell的问题

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

一般情况下,使用递归时直接调用函数的名称,实现递归其实现的调用自身函数。
例子如下:阶乘

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,无论在后期引用函数时使用什么名字,都可以保证完成递归。

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

 

posted @ 2017-03-15 10:08  鱿娱丝  阅读(133)  评论(0编辑  收藏  举报