函数通过引用传递

时间:2017-01-10 20:33:35

标签: javascript function

在我运行以下代码之后为什么myArray仍然是[2,3,4,5],为什么它不会改为[]?

var myArray = [2, 3, 4, 5];
function doStuff(arr) {
  arr = [];
}

doStuff(myArray);

但是,当我执行以下步骤时,myArray确实更改为[2,3,4,5,6]

var myArray = [2, 3, 4, 5];
function doStuff(arr) {
  arr.push(6);
}

doStuff(myArray);

我对此非常困惑。

2 个答案:

答案 0 :(得分:2)

arr

中的局部变量
function doStuff(arr) {
  arr = [];
}

arr = [];arr分配一个全新的对象,因此它不再指向传递的数组。由于局部变量arr在函数返回时超出范围,因此该赋值无效。它肯定不会影响调用者范围内的非局部变量myArray

另一方面,第二个功能:

function doStuff(arr) {
  arr.push(6);
}

实际上对传递的数组执行某些操作,在push命名的对象上调用arr方法。请注意,arr未在函数体中重新定义,因此它永远不会丢失其身份作为传递数组的名称。

答案 1 :(得分:0)

如果您没有引用 myArray ,那么您所做的就是okey,因为这实际上会创建一个空数组。如果你在代码的某个地方引用了另一个变量 myArray ,那么你可以将它设置为null。作为替代方案,您可以使用以下方法清除。否则,如果它不重要,您可以删除引用。



while(myArray.length > 0) {
    myArray.pop();
}