繁体   English   中英

谁或哪个线程拥有Javascript事件循环?

[英]Who or which thread owns the Javascript event loop?

我在这里阅读了很多关于Javascript事件循环的文章。 它们主要讲述事件循环如何与Web API或JS运行时一起工作,例如将事件从Web API移动到要处理的事件队列等等。但我没有看到它们中的任何一个解释事件循环的运行位置,这真的离开了关于事件循环的许多问题。 例如,谁调用事件循环? 线程运行事件循环是否与单线程并执行JS代码的JS运行时线程相同? 谁是事件循环的所有者? 当浏览器窗口打开时,事件循环是否永远在那里运行? 我理解(不完全是:()事件循环在主运行时代码完成时启动但事件循环如何启动?有人可以帮助回答我的问题以帮助我理解事件循环吗?谢谢!

谁调用事件循环? 谁是事件循环的所有者?

JavaScript Engine (例如Chrome中的V8)保存event loop 事件循环得名,因为它通常是如何实现的,通常类似于:

while(queue.waitForMessage()){
  queue.processNextMessage();
}

如果当前没有消息,则queue.waitForMessage会同步等待消息到达。

线程运行事件循环是否与单线程并执行JS代码的JS运行时线程相同?

JavaScript是single-threaded ,JavaScript运行时(JavaScript引擎)中只有一个线程,它保存event loop

当浏览器窗口打开时,事件循环是否永远在那里运行? 我理解事件循环在主运行时代码完成时启动,但事件循环是如何启动的?

是的,事件循环在JavaScript引擎中运行。 以下是Philip Roberts提供的一个视频 ,用于说明事件循环如何在JavaScript中运行。

这里还有一张图片显示了如何在JavaScript引擎中运行以下内容。

function init() {
  var link = document.getElementById("foo");

  link.addEventListener("click", function changeColor() {
    this.style.color = "burlywood";
  });
}

init();

http://blog.carbonfive.com/wp-content/uploads/2013/10/event-loop.png

资源:

http://altitudelabs.com/blog/what-is-the-javascript-event-loop/

http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/

暂无
暂无

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

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