我正在努力理解以下内容:
var foo = [100, 2],
bar = foo;
bar[0] = 9;
console.log(foo[0], bar[0]); // returns => 9, 9
我理解bar[0]
在设置时返回9 - 但foo[0]
如何返回9,而不是返回100?
似乎foo
变为bar
,因此将其设置为从右到左,而不是从左到右
答案 0 :(得分:4)
此处foo
和bar
都指向内存中的相同位置。实际数组在变量之间共享。所以,基本上他们都访问/更新相同的数组。
非原始数据类型不按值传递,它们通过引用传递。
_______ _______
| foo | --> [...] <-- | bar |
| | | |
------- -------
要复制数组,请使用slice
。
var bar = foo.slice();
答案 1 :(得分:0)
foo
变量来指定 bar
。如果你想通过值分配它:
bar = foo.splice(0);
答案 2 :(得分:0)
因为你已经将foo变量赋值给bar并且两者共享相同的内存位置,因此结果是相同的。