在第一个例子:
您正在改变可变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]
是。