Во-первых - всё срабатывает. Попытайтесь осознать разницу между "не срабатывает" и "срабатывает не так, как ожидается".
Во-вторых - обработчик остаётся висеть потому, что вы передаёте в
removeEventListener
не то, что передавали в
addEventListener
. Смотрите сами:
document.addEventListener('click', clickerOut(parent));
document.removeEventListener('click', clickerOut);
clickerOut(parent)
и
clickerOut
- это что по-вашему, одно и то же? Никак нет.
Исправляем:
function clickerOut(parent) {
return function handler(e) {
...
document.removeEventListener('click', handler);
}
}