EventEmitter icon indicating copy to clipboard operation
EventEmitter copied to clipboard

proto.off 删除对应的监听函数后为什么还要把null补进去

Open xiterjia opened this issue 6 years ago • 2 comments

https://github.com/mqyqingfeng/EventEmitter/blob/adef06ac9eae936947252917cb5a6e992e69a0fd/eventEmitter.js#L100

splice从第三个参数开始不是要进行添加元素的操作么?为什么删除对应的事件后,还要把null添加进去,不太理解

xiterjia avatar Jul 20 '18 08:07 xiterjia

应该用不着

chinawzc avatar Jul 30 '19 07:07 chinawzc

主要用在这里

proto.emit = function(eventName, args) {
        var listeners = this.__events[eventName];
        if (!listeners) return;
        for (var i = 0; i < listeners.length; i++) {
            var listener = listeners[i];
            if (listener) {
                listener.listener.apply(this, args || []);
                if (listener.once) {
                     ---> this.off(eventName, listener.listener)
                }
            }

        }

        return this;

    };

如果不填充一个null,而是直接删除的话,那下一次循环的时候会少执行一个回调

threedayAAAAA avatar May 07 '21 15:05 threedayAAAAA