为了账号安全,请及时绑定邮箱和手机立即绑定

js的异步循环队列问题?

js的异步循环队列问题?

繁华开满天机 2018-12-20 14:23:38
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。

查看完整回答
反对 回复 2019-01-10
  • 1 回答
  • 0 关注
  • 606 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信