В вашей исходной логике было e.target.removeEventListener('mouseup', window)
, где e.target
разрешается до document.body
. Так что это эффективно выполняет:
document.body.removeEventListener('mouseup', window);
Одна из проблем здесь заключается в том, что второй аргумент, который передается в метод removeEventListener()
, как ожидается, будет одним из методов, которые вы ранее прикрепили. Ссылка https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener
Учитывая, что вы передаете window
, который не является одним из ранее примененных методов (и вовсе не методом), я предполагаю, что логика либо проверяет, что параметр не является функцией и ничего не делает, или пытается удалить его, видит, что он не соответствует ни одному из прикрепленных методов, и просто ничего не делает. Это, однако, предположение.
Однако, учитывая, что ваша модификация логики для исправления передачи второго аргумента разрешила вашу проблему, это склоняется к тому, чтобы быть этой проблемой, и ваша наблюдаемая проблема, скорее всего, была вызвана тем, что методы слушателя не были удалены, а мусор наблюдался повторяющимися привязками.
Вы можете проверить это, изменив параметр обратно на окно, и если проблема появится снова, это в значительной степени подтвердит это предположение.