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);
});