【发布时间】:2016-02-09 16:16:54
【问题描述】:
看看这个例子:
function A() { console.log('A'); }
function B() { console.log('B'); }
// and then i setTimeout(fn, 0) both of them
setTimeout(A, 0);
setTimeout(B, 0);
是否保证B 会在A 之后立即运行?
浏览器是否有可能在A 和B 之间的队列中添加另一个任务?
注意:A 或 B 函数都没有向事件循环添加任何新任务。
var callbacks = [];
// then add a bunch of callbacks ... (none adds events to event queue)
//case 1:
callbacks.forEach(cb => setTimeout(cb,0))
//case 2:
setTimeout(function() {
callbacks.forEach(cb => cb());
},0);
case 1 和 case 2 中回调的执行顺序有什么不同吗?
【问题讨论】:
-
简单回答:不,不能保证。因为除了 JS 引擎之外,还有很多其他的东西都用到了这个队列。
-
是否同时使用?是否有可能来自
DOM的事件在 js 的一部分运行时被排队? (js不是单线程吗?长时间运行的js脚本会停止冻结浏览器?)
标签: javascript settimeout