函式引數列表的行為
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