函数参数列表的行为
arguments
对象在严格和非严格模式下表现不同。在非严格模式下,argument
对象将反映存在的参数值的变化,但是在严格模式下,对参数值的任何更改都不会反映在 argument
对象中。
function add(a, b){
console.log(arguments[0], arguments[1]); // Prints : 1,2
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // Prints : 5,10
}
add(1, 2);
对于上面的代码,当我们更改参数的值时,arguments
对象会被更改。但是,对于严格模式,同样不会反映出来。
function add(a, b) {
'use strict';
console.log(arguments[0], arguments[1]); // Prints : 1,2
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // Prints : 1,2
}
值得一提的是,如果参数中的任何一个 undefined
,我们试图改变参数的两个值严格模式或者非严格模式 arguments
对象保持不变。
严格的模式
function add(a, b) {
'use strict';
console.log(arguments[0], arguments[1]); // undefined,undefined
// 1,undefined
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // undefined,undefined
// 1, undefined
}
add();
// undefined,undefined
// undefined,undefined
add(1)
// 1, undefined
// 1, undefined
非严格模式
function add(a,b) {
console.log(arguments[0],arguments[1]);
a = 5, b = 10;
console.log(arguments[0],arguments[1]);
}
add();
// undefined,undefined
// undefined,undefined
add(1);
// 1, undefined
// 5, undefined