event-loop中的大爷们

67 阅读1分钟

event-loop

js是单线程event-loop就是js事件循环(先主线程-后异步任务-异步结束回到主线程)

事件循环机制由三部分组成:调用栈,微任务队列,消息队列

event-loop开始:从全局一行一行代码执行,遇到函数调用,就把函数一脚踢个半死,踢完了还把函数压入调用栈中(好可怜啊,来福)。被压入的函数(来福)称之为帧。当函数返回后会从调用栈中弹出(来福报官了?)

调用栈就像公共厕所,函数就像上厕所的人,上完,人是不可能住厕所的。所以函数结束后都会被弹出

无异步的情况

function sb() {
    console.log(1);
}
function sb1() {
    console.log(2);
    sb()
    console.log(3);
}
sb1()

有异步情况fetch,setTimeOut,setInterval

异步操作:fetch,setTimeOut,setInterval压入到调用栈中时候,消息(也就是log())会进入到消息列表中。消息队列中,会等到调用栈清空后再执行


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

function sb2() {
    setTimeout(() => {
        console.log(2);
    }, 0)

    sb1()
    console.log(3);
}
sb2()

有异步Promise,async,await

Promise,async,await的异步操作时,会加到微任务中去,在调用栈清空后立即执行!!!(冲1000会员的待遇)

调用栈中加入的微任务会立马执行(艾玛,小人狗眼看人低,v8大人请插队)

Promise,async,await,这三位大兄弟在我们鹅厂冲了会员,插个队怎么了??犯法吗???
var sb = new Promise(resolve => {
    console.log(4)//立刻输出
    resolve(5) //在then时候输出
});

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

function sb2() {
    setTimeout(() => {
        console.log(2);
    }, 0)
    sb1()
    console.log(3);
    sb.then(resolve => {
        console.log(resolve);
    })
}
sb2()

以上就是event-loop的内容,现在半夜23:57了。求个赞不过分吧,西西