我在 Medium 上读到一篇文章,其中说 “JavaScript 有一个事件表,用于跟踪可能在一段时间间隔后或在解决某些 API 请求后异步执行的所有事件”。这是我第一次听说它,所以我决定研究一下,但谷歌搜索除了那篇文章之外没有返回任何结果。 我还在网上找到了以下信息“JavaScript没有明确的“事件表”数据结构来存储延迟事件。相反,事件和异步任务是通过事件队列和定时器函数(如setTimeout和setInterval)来管理的”。 其中哪一项是正确的? 这是文章
直到今天我才听说过“事件表”这个词。不,JavaScript 语言确实没有这样的东西,但它作为一种可能存在于某些运行时的结构确实有意义。
一个事件表,用于跟踪将异步执行的所有事件
这是完全错误的,或者充其量是非常草率的术语:
但是,到目前为止,我遇到的所有实现(浏览器和服务器端运行时)都没有一个“跟踪所有事件”的全局“事件表”。相反,事件处理程序通常存储在它们注册的对象中。计时器回调存储在
setTimeout
创建的计时器对象中。 onload 回调存储在 fetch
创建的网络请求对象中。 onclick 回调存储在调用 addEventListener('click')
的 DOM 节点中。
无可否认,运行时必须保留当前活动的这些计时器对象、这些网络请求对象、这些文档的一些全局列表(队列?):