var arr = [1, 2, 3, 4];
创建一个新数组,并用一个新数组覆盖现有的数组引用。
arr = [];
必须小心,因为这不会从原始阵列中删除任何项目。传递给函数时,数组可能已关闭。该数组将在函数的生命周期内保留在内存中,尽管您可能不知道这一点。这是内存泄漏的常见原因。
由错误的阵列清除导致的内存泄漏示例:
var count = 0; function addListener(arr) { // arr已关闭 var b = document.body.querySelector("#foo" + (count++)); b.addEventListener("click", function(e) { // 此功能参考保持 // 闭合电流 // 活动正在进行 // 做某事但不需要arr }); } arr = ["big data"]; var i = 100; while (i > 0) { addListener(arr); // 数组传递给函数 arr = []; // 仅删除引用,保留原始数组 array.push("some large data"); // 分配更多的内存 i--; } // 现在关闭了100个数组,每个数组引用一个不同的数组 // 没有一个项目被删除
为防止发生内存泄漏的风险,请使用以下2种方法之一在上述示例的while循环中清空数组。
设置length属性会将所有数组元素从新数组长度删除到旧数组长度。这是删除和取消引用数组中所有项目的最有效方法。保留对原始数组的引用
arr.length = 0;
与方法2相似,但返回一个包含删除项的新数组。如果不需要项,则此方法效率不高,因为仍然仅创建新数组以立即取消引用。
arr.splice(0); // 如果您不希望删除项目,则不应使用 // 仅在执行以下操作时使用此方法 var keepArr = arr.splice(0); // 清空数组并创建一个新数组,其中包含 // 删除的项目
相关问题。