搜索

首页  >  问答  >  正文

javascript - 一个setTimeout的问题

函数测试() {

雷雷
某草草某草草2810 天前577

全部回复(3)我来回复

  • 仅有的幸福

    仅有的幸福2017-06-14 10:55:57

    首先建议题主看一篇关于JavaScript文章
    JavaScript Event Loop运行机制详解

    这篇文章详细阐述了JavaScript事件轮询的原理

    下面来说说题主的问题:

    1、主线程会先执行,当执行到test()的时候两个setTimeout会同时被放进任务队列,然后执行alert(0),所以首先输出 0,此时a的值是19,因为setTimeout还没执行,a没有其他赋值机会;

    2、主线程执行完毕然后轮询任务队列执行定时任务,由于第一个setTimeout时间较第二个短,因此首先执行第一个setTimeout的回调,此时约1s后alert(a)会输出上一步的19,然后a被赋值为5;

    3、接着便执行第二个setTimeout,因为两个setTimeout同时被放进队列里面,所以这里大约会在2s后执行第二个setTimeout的回调,此时会输出上一步得到的5,然后a被赋值为4。之所以是大约2s是因为Javascript定时器并不精确

    回复
    0
  • 三叔

    三叔2017-06-14 10:55:57

    自己的debug 了解机制会更透彻

    回复
    0
  • 漂亮男人

    漂亮男人2017-06-14 10:55:57

    第一个定时器执行完 全局的a就已经变成5了
    test函数中a的变化:1-19-5-最后一次alert(a)-4

    回复
    0
  • 取消回复