I don't recall why I was unregistering, but you're right, that's much better.

> sounds dangerous to modify the iterable you're iterating

Nothing dangerous about deleting a key/value pair after it's been visited by the iterator. Further, from the spec: 

> callbackfn is called only for keys of the map which actually exist; it is not called for keys that have been deleted from the map.

> forEach does not directly mutate the object on which it is called but the object may be mutated by the calls to callbackfn.