事件循环

基本概念

堆:存储对象
栈:存储基础类型变量及对象的指针

执行栈:执行同步js脚本的地方

事件队列:异步js存放的地方

 

定义:当前执行栈中的所有任务都执行完毕, 主线程处于闲置状态时,主线程会去查找事件队列是否有任务。如果有,那么主线程会从中取出排在第一位的事件,并把这个事件对应的回调放入执行栈中,然后执行其中的同步代码...,如此反复,这样就形成了一个无限的循环。这个过程被称为“事件循环(Event Loop)”

 

以下事件属于宏任务:

setInterval()
setTimeout()


以下事件属于微任务

new Promise()

new MutaionObserver()

当当前执行栈执行完毕时会立刻先处理所有微任务队列中的事件,然后再去宏任务队列中取出一个事件。
同一次事件循环中,微任务永远在宏任务之前执行。

setTimeout(function () {
console.log(1);
});

new Promise(function(resolve,reject){
console.log(2)
resolve(3)
}).then(function(val){
console.log(val);
})

 

结果为:

2
3
1

 

posted @ 2020-08-19 14:32  枫叶布  阅读(229)  评论(0编辑  收藏  举报