为什么这个顺序是正确的?

时间:2018-12-07 03:26:27

标签: javascript

(function() { console.log (1);
  setTimeout(function(){console.log(2)}, 1000);
  setTimeout(function(){console.log(3)}, 0); 
  console.log(4); 
})();

输出为: 1个 4 3 2

为什么3不在4之前,因为超时是0ms,难道它不应该立即执行并因此在4之前吗?

2 个答案:

答案 0 :(得分:1)

因为当前函数的执行将在运行任何超时之前完成。

setTimeout(function(){console.log(3)}, 0);

添加了一个超时功能,但是当前功能已经完成,它们中的任何一个都不会触发。

答案 1 :(得分:1)

在“块”完成后,超时被推到处理堆栈的底部。因此,这就是引擎的感觉:

Log 1
Set a timeout 1s later to log 2
Set a timeout 0s later to log 3
Log 4
Run all timeouts