IE8中的jQuery 1.5内存泄漏

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){

我相信我可能在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 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()似乎会使事情进入这种状态,这一点从未确定……如果有人能够解释,我将不胜感激!!!