函数内的JavaScript .push()覆盖了全局变量

Jan*_*any 4 javascript arrays global-variables

.push()方法有以下问题:

var myArray = ["a", "b", "c", "d"];

function add(arr) {
    arr.push("e");
    return arr;
}

add(myArray);

// myArray is now  ["a", "b", "c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)

为什么它会覆盖myArray?无法理解......

SLa*_*aks 9

Javascript(和大多数其他语言)中的数组通过引用传递.

在编写时add(myArray),您将传递对全局myArray变量引用的同一Array实例的引用.
通过两个引用都可以看到对数组对象的任何更改.

要复制实际的数组实例,请写入add(myArray.slice());.
请注意,这不会复制其中的对象.

  • 您可以通过编写`add(myArray.slice());`来传递数组的副本 (4认同)