Javascript是单线程的,这意味着所有事件处理程序都是在没有中断的情况下执行的,所有处理程序都是按顺序执行的,一个接一个地执行。在我以前的所有经历中都是如此,直到我遇到以下代码片段。
我编写以下代码,并在 Chrome (版本51.0.2704.103 m(64位))中执行
let port = chrome.runtime.connect("appid");
port.onMessage.addListener(function (msg: string) {
console.log("enter");
for (let i = 0; i < 9999999; ++i) { }
console.log("leave");
});
另一方(对应于appid)将通过该端口发送2条消息。
在正常执行中(在Chrome devtools中没有设置断点),控制台输出为:
enter
leave
enter
leave
这是完美的。但是,如果我在console.log(“enter”)设置断点;在Chrome devtools中,控制台输出是:
enter
enter
leave
似乎Chrome不会在断点处停止,仍接受第二条消息并运行。 Chrome中是否有超过1个线程来处理Javascript事件?在哪种情况下,我应该考虑Javascript代码不会按顺序运行?