arguments 、形参、实参之间的关系
一、arguments
- arguments :是一个雷数组对象,包含调用函数时传入的所有参数(即实参)。
- arguments 对象 只有以function关键字 定义函数时才有。
- arguments 对象包含一个属性 callee - - 指向arguments对象所在的函数。
二、形参
- 声明函数时所有参数,称为形参。
三、实参
- 调用函数时传递的所有参数,称为实参。
四、例子讲解
arguments 与 实参 与 形参
- arguments 是包含所有 实参 的类数组对象。
- arguments 对象的值 会自动同步 到对应的形参,如:arguments[0] 对应 a,arguments[1] 对应 b
function test(a,b,c){
console.log('a,b,c:',a,b,c);
for(let item of arguments){
console.log(item);
}
}
test(1,2);
test(1,2,3,4);
、需注意的地方
- 首先 arguments 对象的 长度由实参 决定,
- 相对应的arguments 与 形参才会建立映射关系,如:c 的变化不会影响到argument,而 a 会
- 建立映射关系不是访问同一块内存,只是保持同步变化而已,
function test(a,b,c){
a = 9;
c = 4;
console.log('a,b,c:',a,b,c);
for(let item of arguments){
console.log(item);
}
}
test(1,2);
结果:
、获取函数形参的个数和实参的个数
function one(a,b,c){
console.log("arguments个数:",arguments.length);
}
one(); // 不传参
console.log("形参的个数:",one.length);//分别输出:0 3
one(1,2);
console.log("形参的个数:",one.length); // 分别输出:2 3
、当函数给默认值的时候,arguments 与形参的映射关系不存在
function one(a,b=1,c){
console.log("arguments个数:",arguments.length);
}
one();
console.log("形参的个数:",one.length); // 输出 0 1
function one(a,b=1,c){
arguments[1] = 6
console.log("b:",b); // 2
}
one(1,2);