js中异步执行的运行机制是只有主线程空了,才会去读取"任务队列",那么什么时候才是主线程空了啊,是指当前script标签里面的代码都执行完吗,还是怎么样?<script> var n = 0; setTimeout(function () { alert(++n); }, 0); for (var i = 0; i <= 1000000; i++) { }</script><script> alert("a");</script><script> alert("b");</script>
1 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
<script>
var n = 0;
setTimeout(function () {
console.log(++n);
}, 0);
var begin = new Date().getTime()
while(new Date().getTime() - begin < 2000) {
}
</script>
<script>
console.log("a");
</script>
<script>
console.log("b");
</script>
用这个来测试。使用alert因为会发生阻塞,所以会发生想不到的事情。
然后script
会有一个解析的过程。你使用alert
时,后面的script
还没有被解析进主线程,而setTimeout
虽然是0的延迟,但是还是有个最小值的。alert阻塞了后面的解析,此时延时器时间到了,而主线程是空的(没有被解析进主线程)所以会先弹1。
添加回答
举报
0/150
提交
取消