event loop
事件循环机制 由三部分组成:1.调用栈 2.微任务队列 3.消息队列。
event-loop开始的时候会从全局一行一行的执行遇到函数调用会压入到调用栈中被压入的函数被称之为帧当函数返回后会从调用栈中弹出。
function fun1() {
console.log(1)
}
function fun2() {
console.log(2)
fun1()
console.log(3)
}
fun2()
//2 1 3
js中的异步操作比如fetch setTimeout setInterval 压入到调用栈中的时候里面的消息会进去到消息队列中去消息队列中会等到调用栈清空之后再执行。
function func1() {
console.log(1)
}
function func2() {
setTimeout(() => {
console.log(2)
}, 0)
func1()
console.log(3)
}
func2()
//1 3 2
promise async await的异步操作的时候会加入到微任务中去会在调用栈清空的时候立即执行。
调用栈中加入的微任务会立马执行。
var p = new Promise(resolve => {
console.log(4)
resolve(5)
})
function func1() {
console.log(1)
}
function func2() {
setTimeout(() => {
console.log(2)
}, 0)
func1()
console.log(3)
p.then(resolve => {
console.log(resolve)
})
}
func2()
//4 1 3 5 2