javascript – 为传递给函数的数组赋值

前端之家收集整理的这篇文章主要介绍了javascript – 为传递给函数的数组赋值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
var arrN = [1,2,3];

function init(arr){
   arr = [];
   console.log(arrN) //output [1,3],expect []  
}

init(arrN);

使用splice或push方法时,正在修改传递给函数的数组.所以我试图理解使用赋值运算符时发生了什么,为什么它不改变数组呢?是创建传递数组的局部变量?

任何帮助将不胜感激!

解决方法

将不同的对象分配给变量或改变当前由变量引用的对象是有区别的.

(Re)的分配

当您执行如下任务时:

arr = []; // or any other value

……然后先前的价值不会改变.只是arr与之前的值分离并引用了一个新值.原始值(如果它是一个对象)继续存在,但是arr不再能够访问它.

旁注:如果没有其他变量再引用前一个值,垃圾收集器将在某个时间点释放它使用的内存.但这不是你的情况,因为全局变量arrN仍然引用原始值.

变异

如果你没有为arr赋值,而是将变量应用于它,例如使用splice,push,pop或对其中一个属性的赋值,例如arr [0] = 1或arr,这是另一回事. [1].在这些情况下,arr会持续引用同一个对象,并对其引用的对象进行更改,这对于引用同一对象的任何其他变量(如arrN)都是可见的.

清除阵列

现在,如果要清除传递给函数的数组,则必须避免进行类似arr = ….的赋值,而是使用可以在适当的位置改变数组的方法

arr.splice(0)

或者,或者:

arr.length = 0;

现在你实际上已经改变了数组,这也是arrN引用的数组.

猜你在找的JavaScript相关文章