JSFiddle - React, Tailwind, and code Playground

JavaScript

function Observer() {
    var subscribers = [];
    return {
        subscribe: function (subscriber) {
            subscribers.push(subscriber);
        },
        publish: function (publication) {
            for (var i = 0, len = subscribers.length; i < len; i++) {setTimeout(function(sub,pub){sub.call(undefined,pub);},0,subscribers[i],publication);
            }
        }
    };
}

var observer = new Observer;
observer.subscribe(function(){alert("wow");});
observer.subscribe(function untrusted(){
    this[0] = untrusted;
    this.length = 1;
   alert("whoa");
});
observer.publish(); // both event handlers executed
observer.publish(); // both event handlers executed