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

标签 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]

最佳答案

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

    a = 5;

相反。

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

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

关于Javascript - 有时只能修改传递给函数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980563/

相关文章:

javascript - 如何使 Bootstrap 崩溃顺利

javascript - 寻找数组的众数? JavaScript

Javascript 本地与全局

Java数组整数操作

php从多维数组中获取最多和最少出现的值

javascript - 颜色数组,试图给它们一些不透明度

c++ - 指向未初始化数据成员的指针

java - java中对象的内存管理

C++:将int的地址作为参数传递

javascript - AngularJs 总是将最后一个类应用于 body 标签