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了。求个赞不过分吧,西西