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

js事件回调函数为什么没有经过任务队列等待就立即执行了

js事件回调函数为什么没有经过任务队列等待就立即执行了

慕少森 2018-07-25 17:14:34
按照js的原理,事件处理函数是回调,应该事件触发后把绑定的函数添加到任务队列等待下一轮事件循环才执行,得等任务队列的回调,但图中的主线程的所以程序执行完才执行,但图中的代码最先输出2,然后才输出for循环的1,for没执行完怎么就执行任务队列的回调了,求解
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

输入结果是对的,在a.click()开开始执行方法,输出2,然后就是舒心执行1.....接下来定时器执行354


查看完整回答
反对 回复 2018-07-30
?
holdtom

TA贡献1805条经验 获得超10个赞

因为 setTimeout.
调用 setTimeout 后会在等待时间后再执行代码,
也就是说执行到 setTimeout(function () {console.log(3)},0); 并不立即执行要等待0毫秒再执行.
那么问题来了. 如果是等待0毫秒执行. 那输出结果应该是
3 5 2 1 4 ; 
因为执行 for的时间应该会超过 0毫秒.
这是为因为 js 的解析机制引起的.
js会优先解析后整个js块. 然后再调用setTimeout.
所以输出的结果就成了 
2 1 3 5 4

查看完整回答
反对 回复 2018-07-30
  • 3 回答
  • 0 关注
  • 1369 浏览
慕课专栏
更多

添加回答

举报

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