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

https://img1.mukewang.com/5b5ec33300019c9905170234.jpg

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


慕少森
浏览 1370回答 3
3回答

慕娘9325324

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

holdtom

因为 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript