gogoend / blog

blogs, ideas, etc.
MIT License
9 stars 2 forks source link

宏任务、微任务,事件循环,这些都是什么? #34

Open gogoend opened 4 years ago

gogoend commented 4 years ago

emmmmm

最近有个来自未来的同事(当然也可能会成为陌生人)问我Event Loop是什么,并让我说一下这是什么鬼👻 当问到这个问题的时候,我的内心,是绝望的,因为我并没有准备这个问题,呵呵呵呵呵,尴尬了

今日更新:嗯,看来我还是没机会和他成为同事 (=_=)|||

2022-6-8 日更新

函数在执行过程中,会存在一个栈,用于存储当前正在执行的函数,所谓“执行栈”。同时也存在一个队列(或许也可以是两个)用于存放异步函数的回调函数,所谓“异步队列”。

每当遇上新的函数调用,就会把当前函数压入到栈中;执行完毕后从栈中弹出,然后再压入下一个要执行的函数。当栈为空后,就表示当前函数已经执行完成。

当然,如果函数执行过程中间遇上了能够产生异步的函数(如Promise#then、setTimeout),那么就把相关回调压入异步队列中,当浏览器通知到可以执行时,就让相关回调出队并执行。