(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之前吗?
答案 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