ECMAScript(欧洲计算机制造协会对JS的规范)函数的参数和其他语言中的函数参数有所不同。ECMAScript函数不介意传递进来多少个参数和参数类型。比如,你定义了一个函数接受两个参数,在调用的时候,你可以传一个、两个、三个……都没问题,就算不传,JS解析器也不会报错。ECMASript内部中的参数是用一个数组来表示的。函数接受到的是这个数组,该数组不关心参数个数,通过arguments可以访问参数数组
比如定义的函数:
<strong><span style="font-family:Microsoft YaHei;color:#3366ff;">function sayHi(name,message){
alert("Helo"+name+","+message);
}</span></strong>
function sayHi(){
alert("Hello"+arguments[0]+","+arguments[1]);
}
可以这样写的原因是,在函数体内,可以通过arguments对象访问函数的参数数组,name的值可以通过arguments[0]来访问,message可以通过arguments[1]来访问
重写后的函数中不包括命名的参数,没有name、message标识符。这说明了ECMASript函数一个重要的特点:命名参数只提供便利,这点和其他语言,与Java有着明显的区别
通过访问arguments对象的length属性可以知道有多少个参数传递给了函数:
function sayHi(){
alert(arguments.length);
}
sayHi("David","How arre you");//2
sayHi();//0
知道这个特点,可以让函数接受任意个参数实现适当的功能。
function doAdd(){
if(arguments.length ==1){
alert(argumnts[0]+10);
}else if(arguments.length ==2 ){
alert(argumnts[0]+argumnt[1]);
}
}
由于上述 的特点,没有函数参数列表,所以不可能像Java一样实现重载,但是可以可以检查传入的参数的个数和不同的参数类型,可以实现“类似”重载的功能