我试图围绕我的头,了解javascript异步如何在单线程浏览器环境中工作。在浏览器中的javascript:异步任务执行模型
由于异步,我们可以同时处理定时器和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()
被执行(作为一个整体?),它需要一些
3)定时器的回调运行时间(多于那些2毫秒),因为这里提供时刻betweet一个doStuff()
执行与另一
4)未来doStuff()
被称为
4)最后doStuff()
被称为
我看到的却是,所有这三个doStuff()
事情之前计时器回调火灾完成。而且它比那些2ms的时间要长得多。是的,我知道这个时间值设定在setTimeout
不能保证。
我的问题是javascript如何执行代码?什么是在异步队列被调用之前一次执行的最小的原子块?