gpt4 book ai didi

javascript - 无法从函数内部删除 eventListener

转载 作者:行者123 更新时间:2023-12-01 01:33:16 26 4
gpt4 key购买 nike

我调用一个函数,其中包含“if/else”语句,该函数根据作为参数传递的 bool 值添加或删除监听器。
我的问题是我无法通过调用相同的函数来删除先前添加的监听器
我缺少什么?

function listenerTest(handler) {
if(handler) {
window.addEventListener("click", clickFn);
}
else {
window.removeEventListener("click", clickFn);
}

function clickFn(event) {
console.log(event)
}
}

listenerTest(true);

window.setTimeout(listenerTest, 5000, false);
// call the "listenerTest" function 5 seconds later with "false" argument does NOT remove the listener

我已经进行了多次测试,有趣的是,这是有效的

function listenerTest(handler) {
if(handler) {
window.addEventListener("click", clickFn); // listener added
window.removeEventListener("click", clickFn); // and removed right after in the same block scope
}

function clickFn(event) {
console.log(event)
}
}

listenerTest(true);

最佳答案

删除clickFn并将其放在listenerTest的范围之外。每次调用该函数时都会创建一个新实例,因为 clickFn 被提升到listenerTest函数的顶部。

function clickFn(event) {
console.log(event)
}

function listenerTest(handler) {
if(handler) {
window.addEventListener("click", clickFn);
}
else {
window.removeEventListener("click", clickFn);
}
}

listenerTest(true);

window.setTimeout(listenerTest, 5000, false);

关于javascript - 无法从函数内部删除 eventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53052904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com