2012-07-25 50 views
1

有没有办法看到JavaScript创建的“线程”?例如,如果我有一个附加到DOM元素的事件处理程序,我认为JavaScript会隐式地创建一个新线程在后台运行该代码?如果是这样,有没有办法看到(例如通过Firebug,WebKit检查器等)JavaScript已打开的不同“线程”? (如果它不是JavaScript所使用的线程,那么事件处理程序如何在“幕后”工作?)查看JavaScript正在创建的主题?

+2

JavaScript是单线程的。 – Bergi 2012-07-25 23:46:09

回答

4

JavaScript不会生成线程。底层浏览器可能是在它自己的线程环境中处理事件,然后让JavaScript解释器运行处理程序,但是JavaScript中没有线程访问,浏览器的工作方式是特定于实现的。

+0

这意味着JavaScript事件处理程序可以在技术上'阻止'? – user1516425 2012-07-25 23:49:03

+1

@ user1516425:是的。在事件处理程序中执行'while(true);'并在您的页面冻结时观看! :) – Ryan 2012-07-25 23:50:34

2

JavaScript不会创建新线程,它会在浏览器中运行。你无法真正看到这些信息。你可以使用一个分析器,但我不确定这会回答你的问题

0

JavaScript是“单线程”,所有执行是线性的(尽管我们不知道如何底层引擎的工作原理)。

异步操作是基于事件的(DOM事件,Ajax调用,WebWorkers),因此它们的处理程序的执行被追加到调度程序队列 - 它们只会在当前执行完成时执行。这就是为什么无法从外部阻止无限循环的原因 - 它们只会冻结浏览器(并最终抛出异常情况long-running script)。

这与超时(W3 Timer spec)相同,它们在活动定时器列表中添加一个任务。您可以在processing model spec的Web-App API中阅读有关此类任务队列的更多信息。