1

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

4

4 回答 4

4

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

于 2012-07-25T23:45:41.887 回答
2

JavaScript 不创建新线程,它在浏览器中运行。你无法真正看到这些信息。您可以使用探查器,但我不确定是否能回答您的问题

于 2012-07-25T23:45:05.493 回答
0

使用这个工具,看看它是否达到了你想要的效果:Visual Event

于 2012-07-25T23:47:57.377 回答
0

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

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

超时(W3Timer规范)也是如此,它们在活动计时器列表中添加了一个任务。您可以在Web-App API的处理模型规范中阅读有关此类任务队列的更多信息。

于 2012-07-25T23:55:39.583 回答