我越了解JavaScript及其并发模型,我就越困惑......最近的混淆来源是Is JavaScript guaranteed to be single-threaded? +关于PS的很好的课程:https://app.pluralsight.com/library/courses/asynchronous-javascript-reasoning。
在阅读/观看关于 UI交互作为事件来源的问题后,我们知道如果任何代码正在执行,UI就会被阻止。因此,触发事件的唯一时刻(例如,当您实际上可以单击按钮并导致单击事件时)是JavaScript引擎不忙(调用堆栈中没有任何内容而队列中没有任何内容) - 否则UI将被冻结。因此,给定队列为空,单击事件(或任何UI事件)最终是否在队列中?或者它们是即时处理的(即同步调用事件监听器)?
答案 0 :(得分:0)
tl; dr:是的,点击事件(或任何UI事件)最终都在队列中。
JavaScript运行时包含消息队列。 在处理任何其他消息之前,将完全处理每条消息。 在Web浏览器中,只要事件发生并且附加了事件侦听器,就会添加消息。如果没有监听器,则该事件将丢失。因此,单击带有单击事件处理程序的元素将添加消息 - 与任何其他事件一样。