【发布时间】:2014-03-10 05:42:35
【问题描述】:
我对 Javascript 的单线程特性有疑问。
console.log("1");
setTimeout(function(){console.log("2");},3000);
console.log("3");
setTimeout(function(){console.log("4");},1000);
这段代码的结果是1 3 4 2。如您所见,4 在2 之后出现,这让我想知道在单线程环境中2 不应该在4 之后出现吗?如果不是,那么 JS 怎么知道第二个 setTimeout 应该在第一个之前完成?难道不应该有两个线程同时工作来完成两个setTimeouts,以便通知EventLoop吗?
【问题讨论】:
-
setTimeout只是安排一个任务。"2"被安排在未来的3000ms,并且不会阻止其他代码执行。 -
如果它同时完成一件以上的事情,它将是多线程的,但是您的代码不会同时做一件以上的事情。
-
如果代码被安排在同一时间运行,或者意外地在超时时执行了一些代码,会发生什么?在这种情况下它是如何决定执行顺序的?
-
例如如果我(愚蠢地)添加 pausecomp(999); 怎么办?在这个例子的最后? (见sean.co.uk/a/webdesign/javascriptdelay.shtm)
-
多线程和异步是两个不同的东西。