在我运行以下代码之后为什么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);
我对此非常困惑。
答案 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();
}