在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?
答案 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