来自 nodejs source code (LOC 179) ,我们有以下内容:
EventEmitter.prototype.once = function(type, listener) {
/** ... **/
function g() { /** ... **/ }
g.listener = listener; // => ???
this.on(type, g);
return this;
};
到目前为止,我的想法是这样的:
EventEmitter.once() 设置一个 type 事件,并在通过 调用回调 。但是 listener 后立即将其删除g()g.listener = listener; 这行到底做了什么?
它是否在构造函数g()调用时为构造函数对象添加了一个函数对象属性listener?
请您参考如下方法:
设置它以便您稍后可以调用 removeListener。
如果你调用this.once(event, listener),然后又调用了this.removeListener(listener),代码将找不到listener 在列表中,因为它包含在 g 中。
这就是为什么在 L214 进行测试的原因做:
if (list === listener ||
(util.isFunction(list.listener) && list.listener === listener)) {






