【问题标题】:Do UI Events (click,mousedown etc.) go through Event Loop in JavaScriptUI 事件(单击、鼠标按下等)是否通过 JavaScript 中的事件循环
【发布时间】:2016-08-21 10:11:35
【问题描述】:

我对 JavaScript 及其并发模型了解得越多,我就越困惑……最近的困惑来源是 Is JavaScript guaranteed to be single-threaded? + PS 上的精彩课程:https://app.pluralsight.com/library/courses/asynchronous-javascript-reasoning。

在阅读/观看关于 UI 交互作为事件源 的问题后,我的脑海中出现了一个问题:我们知道,如果任何代码正在执行,UI 就会被阻塞。因此,唯一可以触发事件的时刻(例如,当您实际上可以单击按钮并引发单击事件时)是 JavaScript 引擎不忙时(调用堆栈上没有任何内容,队列中没有任何内容) - 否则 UI 被冻结。所以给定队列是空的,点击事件(或任何 UI 事件)是否最终会出现在队列中?或者它们是即时处理的(即同步调用事件监听器)?

【问题讨论】:

    标签: javascript events


    【解决方案1】:

    tl;dr: 是的,点击事件(或任何 UI 事件)最终会出现在队列中。

    JavaScript 运行时包含一个消息队列。 在处理任何其他消息之前,每条消息都会被完全处理。 在 Web 浏览器中,只要事件发生并附加一个事件侦听器,就会添加消息。如果没有侦听器,则事件丢失。因此,使用 click 事件处理程序单击元素将添加一条消息 - 与任何其他事件一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多