我混淆使用javascript数组

ash*_*edi 2 html javascript

var x = [1, 2, 3, 4, 5, 6];

function change1(y) {
  y[0] = 7;
  y[1] = 8;
  y[2] = 9;
  y[3] = 10;
  y[4] = 11;
  y[5] = 12;
}
change1(x);
console.log(x);

var z = [1, 2, 3, 4, 5, 6];

function change2(y) {
  y = [7, 8, 9, 10, 11, 12];
}
change2(z);
console.log(z);
Run Code Online (Sandbox Code Playgroud)

输出:

7,8,9,10,11,12 1,2,3,4,5,6
Run Code Online (Sandbox Code Playgroud)

我无法理解上面的代码为什么change1()函数可以改变传递的数组而change2()函数不能.

为什么断线不起作用?

谢谢

dec*_*eze 14

y[..] = ...正在修改现有对象.任何包含对该对象的引用的内容都可以看到该更改.

y = ...为局部y变量分配一个全新的值,并丢弃先前分配的对象引用.该更改在函数外部不可见,因为没有其他内容可以访问该y变量.