我遇到闭包的事件监听器无法移除事件的情况,最后发现 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()
因为每次clickListener()都会生成一个新的hide,你应该