成长(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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2.什么是函数柯里化? 答:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接...
    Rain_Wuu阅读 2,301评论 1 8
  • 1.屏幕适配:为了让我们开发的程序能够比较美观的显示在不同尺寸、分辨率、像素密度的设备上。1.使用约束布局或者相对...
    小慧sir阅读 2,753评论 0 7
  • UIKit 1.UIView 和 CALayer 是什么关系? UIView 继承 UIResponder,而 U...
    Sephiroth_Ma阅读 2,270评论 0 25
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,605评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,226评论 4 8