繁体   English   中英

JavaScript 是否有一个事件监听器队列,不断检查是否有它们?

[英]Does JavaScript have a queue of event listeners that constantly checked if there are any of them?

我正在学习 JavaScript 并在 Chrome 开发工具或 JavaScript 控制台上添加了一些 JavaScript 代码,以延迟或阻止在几秒钟内单击网站上的任何按钮。 它按预期工作。 但是,该点击会在几秒钟后自动触发。 为什么会这样? JavaScript 是否有一个事件侦听器队列,不断检查是否有任何事件侦听器并对这些事件采取行动?

function hang(secs) {
    const doneAt = Date.now() + (secs * 1000)
    while (Date.now() < doneAt) {}
}

hang(10)

您的while循环将阻止浏览器在请求的时间内执行的所有其他操作。 这很可能会触发浏览器“脚本花费太多时间”的警告弹出窗口。 这不是您在 JavaScript 中实现延迟的方式。 如果您想延迟对用户交互的反应,请使用计时器机制( setTimeout()等)。

具体到您的问题,事件实际上确实在排队,但没有什么是“不断检查”它们; 一个事件发生了,这个简单的事实导致一个动作被放入队列。 当您的 CPU 燃烧循环正在运行时,不会发生任何事件处理程序分派。 function 完成后,将分派事件处理程序。 JavaScript 环境是单线程的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM