郑州网站托管助企,网站建设html模板下载,做网站一般多钱,wordpress为用户添加积分问题
在使用addEventListener为DOM元素绑定事件时#xff0c;使用了bind(this)来改变函数内的this指向。然后使用removeEventListener对事件进行解绑时#xff0c;发现解绑失败。
原因
假如使用addEventListener绑定事件时#xff0c;传递的是匿名函数#xff0c;那么使…问题
在使用addEventListener为DOM元素绑定事件时使用了bind(this)来改变函数内的this指向。然后使用removeEventListener对事件进行解绑时发现解绑失败。
原因
假如使用addEventListener绑定事件时传递的是匿名函数那么使用removeEventListener是无法解绑事件的没有具体的指向程序怎么知道要对那个函数进行解绑呢。而使用bind方法更改函数内部的this指向其实是会返回一个新的函数。所以当我们直接在addEventListener传参时调用bind方法DOM.addEventListener(click, fn.bind(this))就会导致我们事实上绑定了一个匿名函数所以在removeEventListener时无法解绑相应的函数。
解决方法
在进行事件绑定之前先用变量记录下bind方法产生的匿名函数。然后在addEventListener绑定事件时传递这个变量作为参数。当解绑时再传递这个变量进去就可以顺利解绑了。
function fn () {}
const fnBindCallBack fn.bind(this) // 关键在这里DOM.addEventListener(click, fnBindCallBack)DOM.removeEventListener(click, fnBindCallBack)