事件监听器,闭包引用函数指向

发布于 2022-09-12 02:48:02 字数 515 浏览 17 评论 0

我遇到闭包的事件监听器无法移除事件的情况,最后发现 add 时和 remove 时闭包访问的并不是同一个函数,这是为什么,具体见 remove 里的 console.log

let addHide = null
function clickListener() {
  function hide() {
    console.log('hide exc')
  }

  function add() {
    addHide = hide
    document.addEventListener('click', hide, false)
  }

  function remove() {
    console.log(hide === addHide);
    document.removeEventListener('click', hide, false)
  }

  return {
    add,
    remove
  }
}

clickListener().add()
clickListener().remove()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千仐 2022-09-19 02:48:02

因为每次clickListener()都会生成一个新的hide,你应该

let mevent = clickListener()
mevent.add()
mevent.remove()
逐鹿 2022-09-19 02:48:02

问题为什么发不出去

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文