javascript:将参数值更改导致参数值更改?

时间:2015-11-18 08:58:46

标签: javascript

在w3cschool中说“如果函数改变了参数的值,它就不会改变参数的原始值。”

但是,我不太明白,使用以下示例:

function bar(a){
    arguments[0] = 10;
    console.log("a",a);//10
    return a;
}
function foo(cc){
    cc = 10;
    return arguments[0];
}
console.log(bar(333));//10
console.log(foo(333));//10

我已经在chrome和firefox中测试了它们。 根据我的理解,如果参数值的变化不能导致参数值的变化,为什么'bar'无法返回333?

2 个答案:

答案 0 :(得分:2)

给定一个功能:

function bar(a) {
  arguments[0] = 10;
  return a;
}

将其称为bar(50)将返回10,因为bar的范围中的值被替换为10.

什么是“如果函数更改了参数的值,它不会更改参数的原始值。”表示正在执行:

var x = 90;
var y = bar(x);

console.log(y);
console.log(x);
// y is 10
// x is still 90 

...不会更改x 之外的bar 的值。

有关详细信息,请参阅:

答案 1 :(得分:1)

正如鲁道夫斯所说,该规则与外部范围内的变量有关。但并非总是如此。对于阵列和对象规则未应用

function modify(obj) {
  obj.value = 'modified';
}

var objOuter = {value: 'original'};

console.log('The original value is ' + objOuter.value); //original
modify(objOuter);
console.log('The modified value is ' + objOuter.value); //modified