在第一个例子中:
您正在修改变量arr
,它仅仅是保存对数组[2, 3, 4, 5]
的引用,因此它将不再引用[2, 3, 4, 5]
,而是引用另一个数组[]
。
在var myArray = [2, 3, 4, 5];
这一行:
myArray -----------------------------------> [2, 3, 4, 5]
然后在代码行
doStuff(myArray);
处:
myArray -----------------------------------> [2, 3, 4, 5]
↑
arr ----------------------------------------------/
然后在代码行
arr = [];
处:
myArray -----------------------------------> [2, 3, 4, 5]
arr ---------------------------------------> []
=> 因此,在调用 doStuff
后,myArray
仍然是 [2, 3, 4, 5]
。
在第二个例子中:
您正在使用存储在 arr
中的对 [2, 3, 4, 5]
的引用来调用修改它的函数 pop
。
在这一行 var myArray = [2, 3, 4, 5];
:
myArray -----------------------------------> [2, 3, 4, 5]
然后在代码行
doStuff(myArray);
处:
myArray -----------------------------------> [2, 3, 4, 5]
↑
arr ----------------------------------------------/
然后在代码行
arr.pop();
处:
myArray -----------------------------------> [2, 3, 4, 5].pop()
↑
arr.pop() ----------------------------------------/
这将修改数组为:
myArray -----------------------------------> [2, 3, 4]
↑
arr ----------------------------------------------/
=> 因此,在调用 doStuff
后,myArray
现在是 [2, 3, 4]
。