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