JS的执行机制
2019-07-27 本文已影响0人
en_young
如果有多个异步任务的时候呢?
1、首先还是将所有的任务分为同步任务与异步任务,如图一:

2、首先打印出1,然后遇到第一个异步任务的时候,会将该行代码提交给异步进程处理,如果点击了,才会将回调函数写入任务队列,如果不点击,就不会写入任务队列中去。
3、如果不点击,那么继续执行,打印出2,然后遇到下一个异步任务,将该行代码提交给异步进程处理,等到3秒后才会将回调函数写入任务队列中。此时程序会再次查看任务队列,然后发现队列中的回调函数,将其放入执行栈中,执行,打印出3;
4、如果此时点击,就会将点击的回调函数添加至任务队列,同步任务完成后,还会回到任务队列中查看是否有新的任务,此时发现有点击的回调函数,就会将其放入执行栈中,执行点击。(当然如果是在3秒之前点击的,当然会先输出click)
此时任务队列中为空,但是同步任务执行完仍然会重复来查看任务队列中是否有新的任务,这个循环就叫做“事件循环”。
总结如下(图3):
