当在浏览器中运行时,
考虑一个非常简单(但无用)的程序。
那就是说,只有在主程序运行完后,
setTimeout
是否会在主程序执行完成之前触发其代码?主要的浏览器供应商是否就此行为达成了共识,还是这只是实现的副作用?(或者他们已经同意将这个副作用保留为标准行为)考虑一个非常简单(但无用)的程序。
setTimeout(function(){
console.log("Timeout Called")
},1);
for(var i=0;i<10000000;i++){};
console.log("done");
首先我们设置了一个单独的微秒级别的setTimeout
回调函数,它将输出Timeout Called
到控制台。
然后我们在循环中旋转超过一个微秒的时间。
然后我们在控制台输出done
。
当我运行这个程序时,它总是输出
done
Timeout Called
那就是说,只有在主程序运行完后,
setTimeout
回调函数才会被执行。这是可靠且定义明确的行为吗?还是有时候会先暂停主程序的执行,然后运行回调函数,最后再继续执行主程序呢?