成长(10/2000)——面试题合集7

事件循环机制event-loop

  • 事件循环机制由三部分组成:调用栈、消息队列和微任务队列。
  • event-loop开始的时候会从全局一行一行的执行,遇到函数调用,会压入调用栈中,被压入的函数被称之为帧,但函数返回后会从调用栈中弹出
  • js中的异步操作,比如fetch、setTimeout、setInterval 压入到调用栈中的时候里面的消息会进入到消息队列中去,消息队列中,会等到调用栈清空后再执行
  • promise async await的异步操作的时候会加入到微任务中去,会在调用栈清空的时候立即执行
  • 调用栈中加入的微任务会立马执行

实战演练

1.
function fun1() {
    console.log(1);
}
function fun2() {
    console.log(2);
    fun1()
    console.log(3);
}
fun2();

//fun2进入调用栈 //返回2
//fun1进入调用栈 //返回1 //fun1弹出调用栈
//返回3 //fun2弹出调用栈

2.
function func1(){
    console.log(1);
}
function func2(){
    setTimeout( ()=>{
        console.log(2);
    },0)
    func1();
    console.log(3);
}
func2();
//func2进入调用栈 
//setTimeout进入调用栈 console.log(2);进入消息队列
//func1进入调用栈 //返回1 //func1弹出调用栈
//返回3 //func2弹出调用栈 //消息队列执行返回2

3.
let 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
// func2进入调用栈
// setTimeout进入调用栈  console.log(2)进入消息队列
// func1进入调用栈 返回1 func1出栈
//返回3
//p的resolve值为5 返回5 func2出栈 setTimeout出栈
//消息队列执行 返回2

你可能感兴趣的:(成长(10/2000)——面试题合集7)