先上一张自己理解的画出的图
image.png
1、
js引擎执行js代码是单线程的,也就是只有一个主线程上在执行着代码。
2、
执行的任务分为同步任务和异步任务,先执行同步任务。主线程会先将异步任务放到事件队列中(挂起)
同步任务中,遇到函数,在执行函数的时候,会形成当前函数的局部作用域,也就是执行上下文。 在该上下文中会声明变量,参数,this值确定。如果有其他的函数,只能等待执行,一个一个的排队等 待执行,行成函数调用栈。
3、
同步任务执行完成以后,主线程会去事件队列中寻找有没有异步任务。异步任务又分为微任务和宏任务。
补充:js会先执行宏任务,然后将宏任务的回调推入事件队列中,然后再执行微任务,再将微任务的回调推入事件队列中。执行完宏任务微任务得到结果以后,js内部的其他线程会通知主线程任务执行完毕,可以到事件队列中调取回调了。从事件队列中,是先调取微任务的回调,所有微任务的回调调取完毕,再去调取宏任务的回调,直到事件队列为空。注意执行任务的顺序和调取回调的顺序是相反的
先执行事件队列中所有微任务的回调(比如promise),微任务回调执行完以后再去执行宏任务回调(比如setTimeout)。宏任务 当中可能又包含微任务,这样一直执行下去,直到事件队列为空结束。
4、
以上四步行成整个事件循环的过程
Node的事件循环暂且先不写,之后深入了解Node再来补充。
网友评论