js的异步循环队列问题?

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>


繁华开满天机
浏览 607回答 1
1回答

慕丝7291255

<script>&nbsp; var n = 0;&nbsp; setTimeout(function () {&nbsp; &nbsp; &nbsp; console.log(++n);&nbsp; }, 0);&nbsp; var begin = new Date().getTime()&nbsp; while(new Date().getTime() - begin < 2000) {&nbsp; &nbsp;&nbsp;&nbsp; }</script><script>&nbsp; &nbsp; console.log("a");</script><script>&nbsp; &nbsp; console.log("b");</script>用这个来测试。使用alert因为会发生阻塞,所以会发生想不到的事情。&nbsp;然后script会有一个解析的过程。你使用alert时,后面的script还没有被解析进主线程,而setTimeout虽然是0的延迟,但是还是有个最小值的。alert阻塞了后面的解析,此时延时器时间到了,而主线程是空的(没有被解析进主线程)所以会先弹1。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript