IE8中的jQuery 1.5内存泄漏
我相信我可能在jQuery的最新版本中发现了一个相当简单的漏洞IE8中的jQuery 1.5内存泄漏,jquery,memory,internet-explorer-8,memory-leaks,Jquery,Memory,Internet Explorer 8,Memory Leaks,我相信我可能在jQuery的最新版本中发现了一个相当简单的漏洞 var listen = function(){}; var testLeak = function(){ for(var i = 0; i<100; i++){ var item = {}; item.elem = $(document.createElement('div')); item.addListener = function(name,listener){
var listen = function(){};
var testLeak = function(){
for(var i = 0; i<100; i++){
var item = {};
item.elem = $(document.createElement('div'));
item.addListener = function(name,listener){
var self = this;
var wrappedListener = function(){
return listener.apply(self,arguments);
}
this.elem.bind(name, wrappedListener);
wrappedListener = null;
}
item.addListener('eventName',listen );
item.elem.unbind();
item.elem.remove(); //with this un-commented, the loop leaks
// item.elem = null; //with this also un-commented, the leak dissapears
}
};
$(document).ready(function(){
setInterval(testLeak, 100);
}
var listen=function(){};
var testLeak=函数(){
对于(var i=0;i),如果发生了基于闭包的内存泄漏(在我的示例中是“var item={};”),detachevent将不会发出javascript/DOM循环引用已被破坏的信号。您必须手动将对元素的引用设为null。为什么调用remove()似乎使事情进入这种状态是从未确定过的我猜这就是这里TL;DR-in IE,.unbind()最终调用detachevent,detachevent将不会发出javascript/DOM循环引用已被破坏的信号。您必须手动将对元素的引用设为null。为什么调用remove()似乎会使事情进入这种状态,这一点从未确定……如果有人能够解释,我将不胜感激!!!