在非严格模式下,arguments有一个特殊特性

// 修改arguments内的实参值后,实参也会发生变化
function updateArguments(x){
    console.log(x);
    arguments[0] = 'y';
    console.log(x);
}
updateArguments('x');

结果很奇怪,第一次输出x,第二次输出y。也就是说,修改arguments时,实参的值也会被改变

在严格模式下这个特性被删除

/严格模式下的arguments

function setArguments(x){
    'use strict';
    console.log('修改前的值:', x);
    console.log('修改前arguments的值:', arguments);
    arguments[0] = 'y';
    console.log('修改后的值:',x);
    console.log('修改前arguments的值:', arguments);

}
setArguments('严格模式');

输出值如下

修改前的值: 严格模式
修改前arguments的值: { '0': '严格模式' }
修改后的值: 严格模式
修改前arguments的值: { '0': 'y' }

可见arguments虽然被改变,但是实参并没有发生变化。


波罗丁的菠萝
886 声望14 粉丝

深林人不知,明月来相照