为什么第一个函数不像第二个函数那样修改原始数组?
var a= [3, 4, 5];
function doesNothing(a) {
a=[1,1,1];
}
function doesSomething(a) {
a.push(6);
}
doesNothing(a);
console.log(a); // [3,4,5] not [1,1,1]
doesSomething(a);
console.log(a); //[3,4,5,6]
最佳答案
第一个函数没有尝试修改数组。它所做的只是为参数分配一个新值,当它被调用时,该参数被赋予一个数组引用的副本。第一个函数中的变量 a
只是一个以对象引用作为其值的变量。赋值语句只是改变它的值,就好像你的函数有
a = 5;
相反。
请注意,您已将第一个函数 a
声明为参数 - 符号 a
将 a
隐藏在函数外部。
第二个函数确实修改了数组,因为它在修改它的数组对象上调用了一个方法。
关于Javascript - 有时只能修改传递给函数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980563/