一旦调用了removeEventListener,可以安全地假设不会调用删除的处理程序吗?这是一个有点广泛的问题,所以这里有一些具体的例子。
在调用removeEventListener的同一函数中执行清理操作是否安全,或者必须使用setTimeout或其他首先确保执行队列为空的方法?这种行为在浏览器中有所不同吗?
我们也非常感谢相关文件。提前谢谢!
答案 0 :(得分:0)
只是为了让您简要了解JavaScript的运行方式 - 它始终是线程安全的,因为它只在单个线程上运行。
要回答第一个问题,如果在调度事件后删除事件侦听器,则会调用该函数,因为处理程序回调函数最终会在调用堆栈上结束。有关详细信息,我建议您阅读:javascript/browser: when does event dispatching exactly happen?
要回答第二个问题,removeEventListener
函数是同步的,这意味着不可能像这样运行:
removeBrowserListener -> click -> call the event bound function
因为浏览器在完成删除事件侦听器之前被阻止,所以此时没有注册任何点击。但即便如此,答案也不是那么明显,你应该看看这个问题,它解决了同样的问题,但从绑定事件处理程序的角度来看,而不是删除它:Does addEventListener guarantee to be synchronous?