js是单线程的,他的运行基于事件循环机制(event loop)
- 调用栈
- 栈
栈是一种数据结构,后进先出
- 调用栈中,放的是当前正在执行的代码
- 任务队列
- 队列
- 队列是一种数据结构,先进先出
- 任务队列中的是将要执行的代码
- 当调用栈中的代码执行完毕后,任务队列中的代码才会按照顺序依次进入到调用栈中执行
- 在js中任务队列有2种
- 宏任务队列(大部分代码都去宏任务队列中排队)
- 微任务队列(Promise的回调函数(then,catch,finally),相当于vip通道)
整个流程
1.执行调用栈中的代码
2.执行微任务队列中的所有任务
3.执行宏任务队列中的所有代码
queueMicrotask()用来向微任务队列中添加一个任务
// 1 7 3 5 2 6 4
console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
Promise.resolve().then(() => setTimeout(() => console.log(4)));
Promise.resolve().then(() => console.log(5));
setTimeout(() => console.log(6));
console.log(7);