我有一个关于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
后面吗?如果不是这样,那么 JavaScript 是如何知道第二个 setTimeout
应该在第一个之前完成呢?难道不应该有两个线程并发工作以按顺序完成这两个 setTimeout
并通知 EventLoop
吗?
setTimeout
只是安排一个任务。将"2"
安排在未来的3000ms
,不会阻塞其他代码的执行。 - cookie monster