Nodejs EventEmitter.once()如何工作?

从nodejs 源代码(LOC 179) ,我们有以下几点:

EventEmitter.prototype.once = function(type, listener) { /** ... **/ function g() { /** ... **/ } g.listener = listener; // => ??? this.on(type, g); return this; }; 

到目前为止,我的想法是这样的:

EventEmitter.once()设置一个type的事件,并通过g()调用callbacklistener立即将其删除。 但是,真正的行g.listener = listener; 做?

它是否添加了一个属性listener ,它是调用时由构造函数g()创build的函数对象的函数?

它被设置,以便您稍后可以调用removeListener

如果您调用this.once(event, listener) ,稍后调用this.removeListener(listener) ,代码将无法在列表中findlistener ,因为它被封装在g

这就是为什么在L214的testing确实如此:

  if (list === listener || (util.isFunction(list.listener) && list.listener === listener)) {