arguments 对象中有一个callee方法, arguments.callee(arg) 可以反向调用
eg: 递归调用
function factorial(num){
if(num<=1) return 1;
else return num* factorial(num-1);
}
// 求阶乘的例子, 递归调用的函数名和原函数名耦合在一起, 如果函数名更改,递归调用就会失败
var cf = factorial;
alert(cf(5)); //120
factorial=null;
alert(cf(5));// 出错了, 函数已经为null
用callee 方法改进
function factorial(num){
if(num<=1) return 1;
else return num*arguments.callee(num-1);
}
// 改进以后就不会出错了