按照js的原理,事件处理函数是回调,应该事件触发后把绑定的函数添加到任务队列等待下一轮事件循环才执行,得等任务队列的回调,但图中的主线程的所以程序执行完才执行,但图中的代码最先输出2,然后才输出for循环的1,for没执行完怎么就执行任务队列的回调了,求解
3 回答
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
添加回答
举报
0/150
提交
取消