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