![](/img/trans.png)
[英]Javascript: how do I refer to the object which owns the event handler?
[英]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.