异步与同步 、事件循环
【JS事件循环(Event Loop)】 https://mbd.baidu.com/ma/s/DvvSfkWy
异步与同步:
一开始我们写的代码是按顺序执行的,这是同步代码。
但同步代码很容易造成堵塞【如读取和请求时间过长】,所以出现异步。
异步就是不按顺序执行,一个任务完成后不是执行下一个任务,而是执行这个任务的回调。
事件循环
同步任务进入主线程,形成一个执行栈[task queue | 任务队列: 分为宏任务队列和微任务队列]
异步任务进入EventTable并注册回调函数,待制定事件完成【如ajax请求完成,timeout延迟到指定时间】,event Table会将回调函数已入Event queue|事件队列【即宏任务或微任务队列】
用例子说明
先执行宏任务,再执行微任务
遇到微任务【 Promise 、 nextTick 、 await 等】就全部执行了微任务,再下一个宏任务【注明:微任务里面的宏任务不执行】。
有 settimeout【宏任务】 , promise .then()微任务需要在后面执行,是异步的,后面执行[ then 在 setTimout 前面执行]