//1.arguments是一个类数组对象,包含着传入函数中的所有参数。主要用途是保存函数参数,但这个对象还有一个名叫callee的属性
//该属性是一个指针,指向拥有这个arguments对象的函数。
//请看下面非常经典的阶乘函数
function fuctorial(num){
if(num<=1){
return 1;
}else{
return num *fuctorial(num-1);
}
}
//这个函数的执行与函数名fuctorial紧紧耦合在了一起。为了消除这种紧密耦合的现象,这像下面这样使用arguments.callee
function fuctorial(num){
if(num<=1){
return 1;
}else{
return num * arguments.callee(num-1);//
}
}
//在这个重写后的 fuctorial()函数的函数体内,没有再引用函数名fuctorial。这样无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。
var trueFuctorial = fuctorial;
fuctorial = function(){ return 0};
alert(trueFuctorial(5)); //120
alert(trueFuctorial(5)); //0