有人可以解释为什么这不会在点击时触发两次“listenerFn”吗
(function () {
document.querySelector("div").addEventListener("click", listenerFn);
document.querySelector("div").addEventListener("click", listenerFn);
function listenerFn() {
console.log("__testing__");
} })();
虽然像下面这样的东西触发了预期的两倍:
(function () {
myFunction()
myFunction()
function myFunction() {
function listenerFn() {
console.log('My Message')
}
document.querySelector('div').addEventListener('click', listenerFn)
} })();
最佳答案
原因是,在第一种情况下,您尝试添加函数 listenerFn 的相同实例,而在第二种情况下,您要添加两个不同的实例(甚至 myFunction() 调用都有自己的 listnerFn() 实例。
您可以像这样更新您的第一个代码示例,它应该可以工作:
(function () {
document.querySelector("div").addEventListener("click", getListenerFn());
document.querySelector("div").addEventListener("click", getListenerFn());
function getListenerFn() {
let listenerFn = function() {
console.log("__testing__");
}
return listenerFn;
}
})();
关于Javascript addEventListener 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53299407/