在 Javascript 中组合 EventListener 和闭包

Combining EventListener and Closures in Javascript

我正在尝试使用闭包,以便在用户滚动 JavaScript 中的文档时调用一个函数。 因此我创建常量 scroll 并在事件 'scroll' 发生时通过 scroll() 调用内部函数。 当我尝试使用下面的代码执行此操作时,我没有收到错误消息,但由于某种原因没有调用内部函数。

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

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

在此先感谢您的帮助。

您的代码几乎是正确的。但是当您创建 scroll 变量并调用 scrollEvent 时已经创建了闭包(之后 scroll 包含对返回函数的引用),因此您只需要传递 scrolladdEventListener,因为它只是 returns undefined.

另一种方法是省略scroll变量,并在参数中调用scrollEvent,像这样:

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

现在 scrollEvent returns 用作事件侦听器的函数,并创建了闭包,当事件触发时,positions 在事件处理程序中可用。