事件循环
什么是事件循环
js按照语句先后顺序执行,首先执行同步代码。
2. 接着从宏任务的头部取出一个任务执行,执行过程中若遇到微任务则将其添加到微任务的队列中;
3. 宏任务执行完完毕后,微任务的队列中是否存在微任务,若存在则按顺序全部执行完毕;
4. gui渲染
5. 继续执行宏任务,以此类推。
从宏任务到微任务构成事件序号监测机制,即eventloop
function A() {
return Promise.resolve(Date.now());
}
async function B() {
console.log(Math.random());
let now = await A();
console.log(now);
}
B();
等同于
function B() {
console.log(Math.random());
A().then(function(now) {
console.log(now);
})
}
B();
requestAnimationFrame
也属于执行是异步执行的方法,但我任务该方法既不属于宏任务,也不属于微任务。按照
requestAnimationFrame是GUI渲染之前执行,但在微服务之后,不过requestAnimationFrame不一定会在当前帧必须执行,由浏览器根据当前的策略自行决定在哪一帧执行。