js_函数参数的相关问题
目录
arguments
argument对象是什么
arguments是用来保存函数实参的对象,它在函数创建时会自动创建,在函数调用时会初始化。它保存有实参的值,callee属性(函数的指针),length属性(传入实参的数量)
在传入实参情况下arguments对象与形参的对应关系
function a(val) {
console.log(val); //3
console.log(arguments[0]); //3
arguments[0] = 7;
console.log(val); //7
val = 10;
console.log(arguments[0]);//10
}
a(3);
在不传入参数情况下arguments对象与形参的对应关系
function a(val) {
console.log(val); //undefined
console.log(arguments.length); //0
arguments[0] = 7;
console.log(val); //undefined
console.log(arguments.length); //0
val = 10;
console.log(arguments[0]); //7
}
a();
在传入实参数与形参数不对等情况下形参与arguments对象的对应关系
function a(val1, val2) {
console.log(val1, val2); //3,undefined
console.log(arguments[0], arguments[1], arguments.length); //3,undefined,1
val1 = 10;
val2 = 20;
console.log(val1, val2); //10,20
console.log(arguments[0], arguments[1], arguments.length); //10,undefined,1
arguments[1] = 30;
console.log(val2);//20
}
a(3);
在预定义形参的情况下,形参与arguments的对应关系
function a(val1, val2 = 5) {
console.log(val1, val2); //7,5
console.log(arguments[0], arguments[1], arguments.length); //7,undefined,1
val1 = 10;
val2 = 20;
console.log(val1, val2); //10,20
console.log(arguments[0], arguments[1], arguments.length); //7,undefined,1
}
a(7);
总结
- arguments对象只有在传入参数时会与对应的形参进行绑定,此时修改形参会同时修改对应的arguments对象属性,修改arguments对象属性也会修改对应的形参值。
- 如果传入实参数与声明的形参数不对等。传入的实参会被写入arguments对象中,也会赋值给形参,在整个函数的运行中都只有它们会双向绑定,在此之后对剩余形参的赋值不会再和arguments对象进行绑定。也就是说,传入多少个实参,arguments就双向绑定多少个形参。
- 对任何形参进行预定义的情况下,arguments与形参不会进行双向绑定。修改形参的值或修该arguments的值不会影响到另一方。