По умолчанию в callback-функцию нельзя передать никаких аргументов:
Чтобы решить подобную проблему можно воспользоваться одним из следующих методов.
Создать замыкание
В данном случае функция sum возвращает анонимную функцию, которая и передаётся в обработчик событий. Подобное использование замыканий накладывает ограничения на работу с событиями — каждый раз в обработчик передается новая анонимная функция. Это означает, что при желании убрать этот обработчик с помощью removeEventListener у нас ничего не получится:
Все подробности о замыканиях можно узнать в этой статье
Метод функций bind
Другой способ передать аргументы в callback — использовать метод функций bind:
В данном примере удалить обработчик событий можно, предварительно сохранив нужный аргумент в новую функцию:
Между двумя методами передачи аргументов в колбэки есть различия в производительности, изучить которые можно в этой статье.
Комментарии