js是单线程的,异步主要是回调来实现,event-loop就是异步回调的实现原理
js执行过程是先把同步代码执行完,再执行异步代码
同步代码执行完,就启动event-loop机制,一步一步执行
event loop
1. 同步代码一行一行执行放入执行栈中(call stack) ,遇到异步代码(定时器,ajax)放入web api中,等待执行时机
2 . 如果call stack为空,同步代码执行完后,就启动event loop
3 . 开始把web api 的函数放入 callback queue中,然后event轮询执行callback queue中的函数,如果有则放入call stack中,相当于同步代码执行
4. 然后继续轮询查找,像永动机一样循环工作,指导执行完成
dom 与event loop的关系
1 . dom事件也是使用回调,基于event loop
宏任务(macroTask)和微任务(microTask)
每次call stack执行完成后都有从新进行Dom渲染,每次dom结构有改变就会渲染
dom渲染后就开始event loop
微任务在dom渲染前执行
宏任务在dom渲染后执行
微任务放到 macroTask中的,宏任务放到****callback queue中的