JSFiddle - React, Tailwind, and code Playground
JavaScript
var listen = function(){};
var removeEvent = document.removeEventListener ?
function( elem, type, handle ) {
if ( elem.removeEventListener ) {
elem.removeEventListener( type, handle, false );
}
} :
function( elem, type, handle ) {
if ( elem.detachEvent ) {
elem.detachEvent( "on" + type, handle );
}
};
var addEvent = document.addEventListener ?
function( elem, type, handle ) {
if ( elem.addEventListener ) {
elem.addEventListener( type, handle, false );
}
} :
function( elem, type, handle ) {
if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, handle );
}
};
var testLeak = function(){
for(var i = 0; i<100; i++){
var item = {};
item.elem = document.createElement('div');
document.body.appendChild(item.elem);
item.addEvent = function(name,listener){
var self = this;
var wrappedListener = function(){
return listener.apply(self,arguments);
}
addEvent(this.elem,name,wrappedListener);
return wrappedListener;
}
var wrap = item.addEvent('eventName',listen);
removeEvent(item.elem, 'eventName', wrap);
if(item.elem.parentNode){
//item.elem.parentNode.removeChild(item.elem);
//uncommenting this has no effect
}
//item.elem = null;
//uncommenting this stops the leak
}
};
$(document).ready(function(){
setInterval(testLeak, 1000);
});