Javascript 为什么这个序列是真的?

Javascript 为什么这个序列是真的?,javascript,Javascript,输出为: 1. 4. 3. 二, 为什么3不在4之前,因为超时时间是0毫秒,它不应该立即执行,从而在4之前执行?因为当前函数的执行将在任何超时运行之前完成 (function() { console.log (1); setTimeout(function(){console.log(2)}, 1000); setTimeout(function(){console.log(3)}, 0); console.log(4); })(); 添加一个超时函数,但当前函数在任何函数启动

输出为: 1. 4. 3. 二,


为什么3不在4之前,因为超时时间是0毫秒,它不应该立即执行,从而在4之前执行?

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

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

添加一个超时函数,但当前函数在任何函数启动之前完成。

超时将在“块”完成后推送到处理堆栈的底部。这就是引擎对它的看法:

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

我不会这样假设。从技术上讲,这不是一个堆栈,但不管怎样:P
Log 1
Set a timeout 1s later to log 2
Set a timeout 0s later to log 3
Log 4
Run all timeouts