汐华初流乃260 2022-04-21 17:40 采纳率: 100%
浏览 35
已结题

为何打印-1而不是0

len最后是0但为什么定时器打印出-1呢,完全不懂希望得到解答谢谢

img

  • 写回答

2条回答 默认 最新

  • amazingTU 2022-04-21 18:06
    关注

    你没发现打印了5次 -1吗?setTimeout(()=>{},0)这也是一个很经典的面试题,考点是同步异步以及js的宏任务和微任务。当然这里可以理解简单点,就是js基于事件循环机制执行的,优先执行同步任务,异步任务会存放在任务队列里面,等同步执行完毕后再去执行异步。这里的setTimeout就是异步,当执行到这里的时候会将起存放(这里存放的是整个执行逻辑(len--)),继续执行while里面的同步任务。所以等同步任务执行完毕后(执行了5次),此时任务队列里面也就有了5个等待执行的异步任务,现在就开始执行异步任务了,此时len已经是0了,所以结果就是5次 -1。这里要说明一下,异步任务不会相互干扰,每个异步拿到的都是0.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 4月21日