1:首先要明白ecmascript函数的参数特点?
与大多数语言不一样的是,JavaScript的函数不介意传递多少个参数。 此话怎讲呢? 加入你的自定义函数只接受两个参数,但是,在调用这个参数的时候未必一定要传递两个参数,可以是0,1,2,3.....等任意个,而且解析器不会报错!
2:但是,为什么呢?
原理我也希望大家明白:ECMAScript中的参数内部是一个数组来表示的。函数接收的都是这个数组,如果这个数组不包含任何元素,也无所谓。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
例如:我们通过arguments对象来查看你往定义的函数里面传了多少参数,顺便看一下arguments对象是什么?
function did(){
console.log(arguments)
console.log(arguments.length);
}
did();
did('bangbang');
did('bangbang','18');
在控制台输出:
由此可见,在JavaScript中,我们可以向函数传递任意参数,他都不会报错,而且,它将参数存放在arguments对象中供我们查看。
因此,我们在开发过程中就会很容易使用JavaScript的函数,定他分别接入0,1,2,3等数据的时候,分别实现不同的功能。请看
以下的例子:
function doAdd(){
if(arguments.length == 1){
console.log('我有'+arguments.length+'个参数');
}else if(arguments.length ==2){
console.log('我有'+arguments.length+'个参数');
}else{
console.log('我不想数了!');
}
}
doAdd();
doAdd(111);
doAdd(1,2);
doAdd(1,2,5);
执行后结果为:
2:最后,给大家总结一句很重要的话:arguments的长度是由传入的参数个数决定的,不是由定义函数时的命名参数个数决定的,请看代码:
function doAdd1(num1,num2){
arguments[1] = 10;
console.log(arguments[0] + num2);
}
doAdd1(); //NaN
doAdd1(1); //NaN
doAdd1(1,5); //11