Javascript 为什么=无法更改阵列,但可以推送?

Javascript 为什么=无法更改阵列,但可以推送?,javascript,Javascript,我想使用=启动函数中的数组。但是,=无法更改数组,但是推送可以更改数组 我希望它等于[“a”,“b”]。但现在的结果是[“1”,“2”] 我试过arr=['a','b']和arr=['a','b'].slice()。但两者都不起作用 在这种情况下,如何让=工作 var array = []; init(array); console.log(array); function init(arr) { arr.push('1'); arr.push('2'); arr = ['a',

我想使用
=
启动函数中的数组。但是,
=
无法更改数组,但是
推送可以更改数组

我希望它等于
[“a”,“b”]
。但现在的结果是
[“1”,“2”]

我试过
arr=['a','b']
arr=['a','b'].slice()。但两者都不起作用

在这种情况下,如何让
=
工作

var array = [];

init(array);
console.log(array);

function init(arr) {
  arr.push('1');
  arr.push('2');
  arr = ['a', 'b'];
}

发生这种情况的原因是,您正在为局部变量分配新数组,而在分配之前,局部变量保存传入数组的值

该参数包含对传入值的引用。但是,该参数仍然是一个局部变量。写入该变量只会修改局部变量,并将丢失保留的引用

要展开,请从被调用开始:

init(array);//call function init with value array
接下来在实例化时创建上下文环境,它保存一个局部变量
数组
,该变量的值与传入的
数组
的值相同(在您的示例中,它们具有相同的名称)

在此之后,将两个值推送到
数组
的值,这是传入的
数组
的值

array.push('1');
array.push('2');
这里似乎是混乱发生的地方。局部变量
数组
(仍保留传入的
数组
)的值已更改为新数组。结果是局部变量
array
不再保存传入的
array
的值,而是现在保存
['a','b']
的值

array = ['a', 'b'];

这就是为什么看起来您无法通过赋值来更改数组的原因,因为您在该范围内唯一可以访问的是与原始数组相关的局部变量。

array.length=0;//如果您想在数组之前刷新它。push('a','b');//要推送两个项,travis说的是,您需要将数组分配给init调用
array=init(array)
并在init函数中返回修改后的数组<代码>返回数组
这是正确答案。更容易注意到名称是否不同,比如函数定义为
function init(arg_array){…}
Perfect dupe target@torazaburo.JavaScript是pass-by-value。局部变量
array
引用了与全局变量
array
相同的对象。因为对象是可变的,所以可以对值本身进行更改。但是由于现在全局和局部
数组
变量之间存在引用,因此分配给局部变量不会影响全局变量。只是为了下一次遇到这样的问题:请对不同的事物使用不同的名称。调用外部变量
array
和调用
init
函数的参数
array
都会造成不必要的混乱。@T.J.Crowder耶!!我只是注意到:P完成了编辑。
array.push('1');
array.push('2');
array = ['a', 'b'];