我试图绕开我的脑袋,了解 javascript async 在单线程浏览器环境中是如何工作的。
作为异步,我们可以同时处理计时器和 xhr 请求。现在假设我有类似下面的东西
function doStuff() {
for(var i=0; i<100000000; i++) {
// do something to make proc busy
if(i%1000 === 0) {
console.log('in for loop');
}
}
}
setTimeout(function() {
console.log('timed out')
}, 2);
doStuff();
doStuff();
doStuff();
计时器设置为非常小的值(2ms),所以我想它应该如下工作:
1) 定时器回调排队
2)doStuff()
被执行(作为一个整体?),它需要一些时间(超过 2 毫秒)
doStuff()
3)计时器回调运行,因为在一个执行和另一个执行之间有一个时刻
4) nextdoStuff()
被称为
4)最后一个doStuff()
被称为
相反,我看到的是所有三doStuff()
件事都在计时器回调触发之前完成。而且它比那些 2ms 的时间要长得多。是的,我知道setTimeout
不能保证设置的这个时间值。
我的问题是javascript如何执行代码?在调用异步队列中的某些内容之前将立即执行的最小的原子块是什么?