在 webAPI DOM 中,事件侦听器是否使用单独的线程侦听用户操作,然后将回调排队到微任务?
In webAPI DOM, are event listener listening for user action with a seperate thread, then queues callback to microtask?
Javascript 在同步单主线程上运行。并通过事件循环等待浏览器内部网络 api returns 返回给我们的新微任务/宏任务。我看过 fetch、xhr 的例子,我想知道 DOM 监听用户操作也是这种情况。由于我无法想象单个线程如何能够听取用户输入但不阻止网页上 JavaScript 的其余部分。
这里我根据我对 fetch 和 xhr 的理解进行概括,我知道网络 http 请求在一个单独的线程上运行并且内部浏览器绑定帮助 webapi returns 一个任务到 micro/macro 任务队列以供下一个事件循环检测(当堆栈清空时)。
或者另一个例子,比如 setTimeout returns 到宏任务队列。但计时永远不会在 javascript 线程上。
DOM 也是 Web API 而不是 JS 的一部分。当事件从 DOM 元素 触发时,您已将侦听器附加到 (例如,单击已附加侦听器的按钮),它将将该侦听器的回调放在由 JS 堆栈处理的适当队列,因此在单击 DOM 元素之前永远不会进入队列。有了这个,您可以拥有 DOM Web API 正在处理的数十/n
个侦听器,除非它们专门与之交互,否则不会阻塞单个 JS 线程或进入队列。
如果事件从 DOM 元素触发但它没有附加侦听器,则堆栈上不会发生任何事情,因为没有回调将进入您的队列。
Javascript 在同步单主线程上运行。并通过事件循环等待浏览器内部网络 api returns 返回给我们的新微任务/宏任务。我看过 fetch、xhr 的例子,我想知道 DOM 监听用户操作也是这种情况。由于我无法想象单个线程如何能够听取用户输入但不阻止网页上 JavaScript 的其余部分。
这里我根据我对 fetch 和 xhr 的理解进行概括,我知道网络 http 请求在一个单独的线程上运行并且内部浏览器绑定帮助 webapi returns 一个任务到 micro/macro 任务队列以供下一个事件循环检测(当堆栈清空时)。
或者另一个例子,比如 setTimeout returns 到宏任务队列。但计时永远不会在 javascript 线程上。
DOM 也是 Web API 而不是 JS 的一部分。当事件从 DOM 元素 触发时,您已将侦听器附加到 (例如,单击已附加侦听器的按钮),它将将该侦听器的回调放在由 JS 堆栈处理的适当队列,因此在单击 DOM 元素之前永远不会进入队列。有了这个,您可以拥有 DOM Web API 正在处理的数十/n
个侦听器,除非它们专门与之交互,否则不会阻塞单个 JS 线程或进入队列。
如果事件从 DOM 元素触发但它没有附加侦听器,则堆栈上不会发生任何事情,因为没有回调将进入您的队列。