深入理解深入理解JavaScript函数参数函数参数(推荐推荐)
前面的话前面的话
javascript函数的参数与大多数其他语言的函数的参数有所不同。函数不介意传递进来多少个参数,也不在乎传进来的参
数是什么数据类型,甚至可以不传参数。
arguments
javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查。实际上,javascript函
数调用甚至不检查传入形参的个数
function add(x){
return x+1;
}
console.log(add(1));//2
console.log(add('1'));//'11'
console.log(add());//NaN
console.log(add(1,2));//2
同名形参同名形参
在非严格模式下,函数中可以出现同名形参,且只能访问最后出现的该名称的形参
function add(x,x,x){
return x;
}
console.log(add(1,2,3));//3
而在严格模式下,出现同名形参会抛出语法错误
function add(x,x,x){
'use strict';
return x;
}
console.log(add(1,2,3));//SyntaxError: Duplicate parameter name not allowed in this context
参数个数参数个数
当实参比函数声明指定的形参个数要少,剩下的形参都将设置为undefined值
function add(x,y){
console.log(x,y);//1 undefined
}
add(1);
常常使用逻辑或运算符给省略的参数设置一个合理的默认值
function add(x,y){
y = y || 2;
console.log(x,y);//1 2
}
add(1);
[注意]实际上,使用y || 2是不严谨的,显式地设置假值(undefined、null、false、0、-0、”、NaN)也会得到相同的结果。
所以应该根据实际场景进行合理设置
当实参比形参个数要多时,剩下的实参没有办法直接获得,需要使用即将提到的arguments对象
javascript中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。在
函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。arguments对象并不是Array的实
例,它是一个类数组对象,可以使用方括号语法访问它的每一个元素
function add(x){
console.log(arguments[0],arguments[1],arguments[2])//1 2 3
return x+1;
}
add(1,2,3);
arguments对象的length属性显示实参的个数,函数的length属性显示形参的个数