code: function forEachEventDispatch(event, cb) {
    var dispatchListeners = event._dispatchListeners;
    var dispatchIDs = event._dispatchIDs;
    if ("production" !== "development") {
      validateEventDispatches(event);
    }
    if (Array.isArray(dispatchListeners)) {
      for (var i = 0; i < dispatchListeners.length; i++) {
        if (event.isPropagationStopped()) {
          break;
        }
        // Listeners and IDs are two parallel arrays that are always in sync.
        cb(event, dispatchListeners[i], dispatchIDs[i]);
      }
    } else if (dispatchListeners) {
      cb(event, dispatchListeners, dispatchIDs);
    }
  }
docs: Invokes `cb(event, listener, id)`. Avoids using call if no scope is
  provided. The `(listener,id)` pair effectively forms the "dispatch" but are
  kept separate to conserve memory.