arguments的主要用途是保存参数,但是他还有callee属性.
一:callee指向arguments对象的函数.
示例一:
1 function calture(num) {//阶乘计算 2 if (num <= 1) return 1; 3 else { 4 return num * calture(num - 1); 5 } 6 }
在代码内部出现了calture的调用.这在以后的代码维护中是很不利的,如果某天把外面函数名改了,里面没有改,后果大家知道了吧.
对于这个问题可以这个样子优化的嘛:
1 function calture(num) {//阶乘计算 2 if (num <= 1) return 1; 3 else { 4 return num * arguments.callee(num - 1); 5 } 6 }
二:caller这个属性中保存着调用当前函数的函数引用,如果是全局作用域中调用,它的值是null.
1 function Me() { 2 You(); 3 } 4function You() { 5 alert(You.caller); 6 } 7 Me();
效果:
对上面的代码经行优化一下:
1 function Me() { 2 You(); 3 } 4 function You() { 5 alert(arguments.callee.caller);
6 }
7 Me();