Well, the old code was basically doing that anyway, since it called `concat` to remove things. But when the number of listeners went from 1 to 0, `this._listeners[t]` would get deleted and then the `dispatchEvent` loop would explode. You'd also want to make the copy when you add listeners, so that newly-added listeners don't fire in the current iteration. (This seems to be consistent everywhere.)

But yeah, something like that would work too. Keep the current `concat` dance on `removeEventListener`, do a similar `concat` on `addEventListener`, and, in `dispatchEvent`, don't make a copy, but do save a reference to the list, so that we don't get bitten if the list goes away (due to transition from 1 to 0). Both work fine. I doubt any of these operations are expensive enough that there's any difference between the two version.