Javascript 什么';在下面的示例中,是什么导致内存泄漏?

Javascript 什么';在下面的示例中,是什么导致内存泄漏?,javascript,jquery,Javascript,Jquery,单击添加元素按钮添加1000个div。然后单击删除元素删除1000个元素。此外,我没有附加任何事件处理程序,因此我认为在对div调用remove()之前,不需要对div调用off()。 添加元素 删除元素 $(#addDivs”)。在(“单击”,函数()上{ var i; var-div; 对于(i=0;i

单击添加元素按钮添加1000个div。然后单击
删除元素
删除1000个元素。此外,我没有附加任何事件处理程序,因此我认为在对div调用
remove()
之前,不需要对div调用
off()


添加元素
删除元素
$(#addDivs”)。在(“单击”,函数()上{
var i;
var-div;
对于(i=0;i<1000;i++){
div=$(“”);
div.html(i);
$(“#框”)。追加(div);
//div.on(“单击”,函数(){
//console.log($(this.text());
//});
}   
});
$(“#removediv”)。在(“单击”,函数()上{
$(“#box div”)。每个(函数(){
//$(this.off();
$(this.remove();
});
});


在时间线的开始和结束时,我进行了垃圾收集。

不管您是有1000个div还是只有1个div。增加的原因是按钮的事件处理程序不是div。尝试将此代码添加到“删除”按钮的事件处理程序:

$("#removeDivs").off("click");
$("#addDivs").off("click");

您会注意到使用率立即下降。

请修复您的代码笔链接,它当前必须复制粘贴。Thanks@AnuradhaKulkarni已修复,立即工作。不要在循环中附加元素。将所有元素推送到一个数组中,并在循环后执行一个
.append()
调用。这将为您节省大量的时间和内存。按照编程,浏览器必须访问页面至少2000次才能附加所有div,其中2次就足够了。同样的道理也适用于移除。如果框中只包含div,只需将框的innerHTML设置为nothing,即可一次性删除所有div,而不是每次触发DOM查找时逐个删除它们。技术上没有内存泄漏,只是内存使用效率非常低。
$("#removeDivs").off("click");
$("#addDivs").off("click");