简述:js中的函数大家都比较熟悉,今天来分享下函数中的默认参数arguments。js的函数参数和其他的语言有些不同,它并不介意你传进来多少个参数,以及参数的数据类型,即使你在定义函数时,只设置了两个形参,那么在调用这个函数时,你给他传递一个、两个,或者是其它四个、五个实参,它都能接收,之所以会这样是因为在函数参数内部是用一个数组来表示的,在函数体内是通过arguments对象来访问这个参数数组,从而获取传递给函数的每个参数。arguments对象只是与数组类似,但他并不是一个数组,可以把它叫做伪数组,你也可以把它叫做其它的都可以。
Arguments代码实例:
一、函数的默认参数arguments;
function fn() {
console.log(arguments);
}
fn()
输出
可以看到,我们在调用函数时,没有传递任何参数,但是依然可以在函数内部,获取到数组形式的arguments对象;
二、当函数参数只有一个时;
function fn(a){
console.log(a);
console.log(arguments[0]);
}
fn(2)
输出
可以看到,我们可以通过arguments[0]来获取到传递进来的参数实例;
三、当我们传递的实参个数大于形参的个数时;
function fn(a) {
console.log(a);
console.log(arguments);
console.log(arguments[2]);
}
fn(2, 3, 4)
输出
可以看到,在我们没有使用形参接收参数时,在函数内部依然可以使用arguments来获取到实参数据。arguments接受到传递过来的所有数据,把他们都给装进了一个数组里,并且可以通过索引拿到相应的值,索引从0开始。
四、当我们传递的实参个数小于形参的个数时;
function fn(a, b) {
console.log(a);
console.log(b);
console.log(arguments[0]);
console.log(arguments[1]);
}
fn(1);
输出
可以看到,在没有传递实参时,在函数内部使用对应的形参和arguments都是undefined;
五、当我们给形参赋值时;
修改形参
function fn(a) {
a = 5;
console.log(a);
console.log(arguments[0]);
}
fn(2, 3, 4);
输出
修改arguments
function fn(a) {
arguments[0] = 6;
console.log(a);
console.log(arguments[0]);
}
fn(2, 3, 4);
输出
可以看到,通过修改形参的值和arguments的值,不管改的是两者中的哪一个,都会影响对应双方的值;
小结:
1、每一个函数,都有一个默认参数,参数是一个数组形式的arguments对象,可以通过数组下标来获取到对应的值。
2、当我们传递的实参个数大于形参的个数时,依然可以通过arguments获取到对应的实参数据,而且修改形参对应的值,arguments的值也会更新,反之亦然。
补充:当我们传递的实参个数小于形参的个数时,赋值的形参值被改变,不会影响arguments对象,因为arguments对象的大小是由传入的实参的个数决定的,并不是由定义的命名参数的个数决定的,没有传递值的形参将会自动被赋予undefined值,跟没有定义直接使用一样,举个例子
function fn(a, b) {
b = 7;
console.log(a);
console.log(b);
console.log(arguments[0]);
console.log(arguments[1]);
}
fn(1);
输出