使用JQuery/JavaScript导致内存泄漏的常见方法有哪些?

What are some common ways to cause memory leaks using JQuery/JavaScript?

本文关键字:方法 常见 泄漏 JQuery JavaScript 内存 使用      更新时间:2023-09-26

我的问题假设您正在创建一个将显示"很长时间"的网页。 我很好奇在这种情况下使用 JQuery/JavaScript 时会导致内存泄漏的一些常见陷阱是什么? 例如,当您在元素集合上调用$.remove()时,内存方面会发生什么? 谢谢!

JavaScript 使用垃圾回收来回收 不再使用的字符串、对象、数组和函数。 这使您(程序员)不必显式释放 记住自己,是制作JavaScript的重要组成部分 编程比C编程更容易。

参考资料 : 查看此以获取更多信息有关 SO 的答案

事件注册机制 MDN 中的内存问题

var i;  
var els = document.getElementsByTagName('*');  
// Case 1  
for(i=0 ; i<els.length ; i++){  
    els[i].addEventListener("click", function(e){/*do something*/}, false});  
}  
// Case 2  
function processEvent(e){  
    /*do something*/  
}  
for(i=0 ; i<els.length ; i++){  
  els[i].addEventListener("click", processEvent, false});  
}  

在第一种情况下,在每个循环转弯处创建一个新的(匿名)函数。在第二种情况下,将先前声明的同一函数用作事件处理程序。这会导致较小的内存消耗。此外,在第一种情况下,由于没有保留对匿名函数的引用,因此无法调用 element.removeEventListener,因为我们没有对处理程序的引用,而在第二种情况下,可以

myElement.removeEventListener("click", processEvent, false)