函式引數列表的行為

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