3.7 arguments
关于函数参数:
function(num){
}//num 即为命名参数
- 函数的命名参数只提供便利,非必须。任何参数都可以通过arguments对象来获取
- arguments对象只是与数组类似,但并不是数组的实例
- arguments的值始终与对应命名参数的值保持一致,但是他们的内存空间是独立的
函数重载:
为一个函数编写两个定义,只要函数签名不同即可,即函数重载。
在ECMAscript函数中,由于不存在函数签名的定义,所以不存在函数重载。但是可以通过arguments对象来检测传入参数的类型或者数量,做出不同的反应,模仿函数重载。
arguments callee
callee是arguments的一个属性,在哪一个函数中运行,它就代表哪一个函数。 一般用在匿名函数中,实现对自身的调用
//用于验证参数
//arguments.length 实参的长度
//arguments.callee.length形参(定义时规定的需要的参数)长度
function calleeLengthDemo(arg1, arg2) {
if (arguments.length==arguments.callee.length) {
window.alert("验证形参和实参长度正确!");
return;
} else {
alert("实参长度:" +arguments.length);
alert("形参长度: " +arguments.callee.length);
}
}
//实现10的阶乘
(function(n){
if(n > 1) return n* arguments.callee(n-1);
return n;
})(10);
注意:在严格模式中,废弃了该属性,不推荐使用 MDN