event loop(事件轮询机制)
- JS是单线程的,所有的JS代码都会在主线程上执行
- 主线程上的同步任务加载即立即执行
- 异步任务不会立即执行,而是交给对应的管理模块
- 管理模块监视异步任务是否满足条件,满足则把对应的回调放入回调队列中
- 主线程上的同步任务执行完毕,会询问回调队列是否有可执行的回调函数。
- 如果有则将回调函数钩到主线程上执行
- 如果没有则待会再来询问
微任务与宏任务
- macro-task(宏任务):包括整体代码script,setTimeout,setInterval
- micro-task(微任务):Promise,process.nextTick
- 不同类型的任务会进入不同的Event Queue,有宏任务的队列和微任务的队列。
- 事件循环的顺序,决定js代码的执行顺序。进入整体代码(宏任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务。