Javascript - 只能有时修改传递给函数的数组

Jim*_*imF 8 javascript arrays reference

为什么第一个函数不像第二个函数那样修改原始数组?

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]
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 6

第一个函数不尝试修改数组。它所做的只是为参数分配一个新值,当它被调用时,它被赋予了一个数组引用的副本。第a一个函数中的变量只是一个以对象引用为值的变量。赋值语句只是改变它的值,就好像你的函数有

    a = 5;
Run Code Online (Sandbox Code Playgroud)

反而。

请注意,您已将第一个函数声明a为参数 - 该符号a隐藏a了函数的外部。

第二个函数确实修改了数组,因为它调用了修改它的数组对象上的方法。


pra*_*ant 0

尝试这个

var a= [3, 4, 5];
function doesNothing() {
    a=[1,1,1];
}

function doesSomething() {
    a.push(6);
}

doesNothing(a);
console.log(a);    
doesSomething(a);
console.log(a);
Run Code Online (Sandbox Code Playgroud)