javascript - Javascript addEventListener 异常
问题描述
有人可以解释为什么这不会在点击时触发两次“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;
}
})();
推荐阅读
- angular - Bundle.js 从列表中丢失
- stream - Apache Pulsar 支持的最大消息大小
- jquery - 使用 if 语句使用 jquery 每个函数时遇到问题
- python - 使用 enumerate 获取列表列表 (json)
- java - 如果@Retryable 返回值,则@Recover 不起作用
- c# - 如何使 SVG 在其中显示特定数量的路径
- ansible - lineinfile/regexp/line:为什么在文件末尾有行?
- adobe-illustrator - 添加新的 Illustrator 脚本标尺单位
- reactjs - Apollo 3 useQuery & useMutation 导致 Gatsby Build 崩溃
- java - 如果 Java 中的语句不能正常工作