Объединение EventListener и замыканий в Javascript - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь использовать закрытие, чтобы вызвать функцию, когда пользователь прокручивает документ в JavaScript. Поэтому я создаю константу scroll и вызываю внутреннюю функцию через scroll(), когда происходит событие 'scroll'. Я не получаю сообщения об ошибке, когда пытаюсь сделать это с помощью приведенного ниже кода, но внутренняя функция по какой-то причине не вызывается.

const scroll = scrollEvent();
document.addEventListener("scroll", scroll());

function scrollEvent() {
    debugger;
    var positions = {pos1: 3, pos2: 5};
    return function() {
        loadContent(positions);
    }
}

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 08 мая 2020

У вас почти правильный код. Но закрытие уже создано, когда вы создаете переменную scroll и вызываете scrollEvent (после этого scroll содержит ссылку на возвращаемую функцию), поэтому вам нужно передать только scroll в addEventListener, потому что вызывая его просто возвращает undefined.

Другой способ - опустить scroll переменную и вызвать scrollEvent в аргументе, например:

document.addEventListener("scroll", scrollEvent());

Теперь scrollEvent возвращает функцию для использования в качестве прослушивателя событий, и создается закрытие, и positions становится доступным в обработчике событий при возникновении события.

...