diff --git a/lib/events.js b/lib/events.js index 3e6f1aff362c40..33bcc185337079 100644 --- a/lib/events.js +++ b/lib/events.js @@ -101,8 +101,19 @@ function emitThree(handler, isFn, self, arg1, arg2, arg3) { } } +function emitMany(handler, isFn, self, args) { + if (isFn) + handler.apply(self, args); + else { + var len = handler.length; + var listeners = arrayClone(handler, len); + for (var i = 0; i < len; ++i) + listeners[i].apply(self, args); + } +} + EventEmitter.prototype.emit = function emit(type) { - var er, handler, len, args, i, listeners, events, domain; + var er, handler, len, args, i, events, domain; var needDomainExit = false; events = this._events; @@ -160,14 +171,7 @@ EventEmitter.prototype.emit = function emit(type) { args = new Array(len - 1); for (i = 1; i < len; i++) args[i - 1] = arguments[i]; - if (isFn) - handler.apply(this, args); - else { - len = handler.length; - listeners = arrayClone(handler, len); - for (i = 0; i < len; ++i) - listeners[i].apply(this, args); - } + emitMany(handler, isFn, this, args); } if (needDomainExit)