jQuery event looping I'm looking for a way to shrink this down. It'not anything special or unique but I feel the repetitive nature of the code could lend itself to a sleeker and more functional refactoring.

$.e = {
    doc: { ready:[], custom:[] },
    win: { scroll:[], scrollstart:[], scrollstop:[], load:[], resize:[], resizestart:[], resizestop:[], orientationchange:[] }
};


$(window).on({
    load:function(){for(var i = 0; i &lt; $.e.win.load.length; i++){ $.e.win.load[i](); }},
    scroll:function(){for(var i = 0; i &lt; $.e.win.scroll.length; i++){ $.e.win.scroll[i](); }},
    scrollstart:function(){for(var i = 0; i &lt; $.e.win.scrollstart.length; i++){ $.e.win.scrollstart[i](); }},
    scrollstop:function(){for(var i = 0; i &lt; $.e.win.scrollstop.length; i++){ $.e.win.scrollstop[i](); }},
    resize:function(){for(var i = 0; i &lt; $.e.win.resize.length; i++){ $.e.win.resize[i](); }},
    resizestart:function(){for(var i = 0; i &lt; $.e.win.resizestart.length; i++){ $.e.win.resizestart[i](); }},
    resizestop:function(){for(var i = 0; i &lt; $.e.win.resizestop.length; i++){ $.e.win.resizestop[i](); }},
    orientationchange:function(){for(var i = 0; i &lt; $.e.win.orientationchange.length; i++){ $.e.win.orientationchange[i](); }}
});
Use one event listener that propagates the event.
The correct collection of listeners in $.e.win is selected with event.type.

$.each($.e.win, function(eventName) {
  $(window).on(eventName, propagateEvent);
});

function propagateEvent(event) {
  var listeners = $.e.win[event.type];
  for (var i = 0; i &lt; listeners.length; i++) {
    listeners[i].call(this, event);
  }
}