跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于前端的闭包和事件解绑问题
未分類
20 5 月 2020

关于前端的闭包和事件解绑问题

关于前端的闭包和事件解绑问题

資深大佬 : qaqLjj 1

add,remove 这两个闭包访问的 hide 函数为什么不是同一个函数呢,
正因为不是同一个函数,导致事件解绑失败了。
求高手指教

——-借助全局变量 addHide 保存调用 add 时访问的 hide ,代码如下——-

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() 

大佬有話說 (5)

  • 資深大佬 : xxx749

    你这代码跑了两次,所有 hide 函数也声明了两次,你把 clickListener 函数的返回值赋值给变量再试一次就相等了

  • 資深大佬 : xxx749

    @xxx749 #1 所有 -> 所以

  • 主 資深大佬 : qaqLjj

    @xxx749 你说的对,我发完问题也看出来了,执行一次就创建了一个新的闭包

  • 資深大佬 : rabbbit

    const {add, remove} = clickListener()
    add()
    remove()

  • 資深大佬 : SoloCompany

    这种问题很常见也是无解的

    如果闭包不保证单例, 一般的解决方案是增加名称空间
    add: $(document).on(‘click.moduleHash’, hide)
    remove: $(document).off(‘click.moduleHash’)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具