来自 https://ths.js.org/2020/12/13/用可视化的方式解释事件循环和Promise/
在js中调用方法 会把方法存在执行栈中,当有返回值后,就会弹出执行栈
当定时器 1s后 执行fun 函数,
javascript
setTimeout(()=>{
fun()
},1000)首先程序会在1s后,将方法推入 队列 中,如果此时执行栈为空,则会把fun 函数推入到执行栈,如果执行栈不为空,则会在队列中等待执行栈继续执行
javascript
setTimeout(()=>{
console.log("1")
},0)
const fun = ()=>{
console.log("2")
}
fun();打印的结果是
javascript
2
1哪怕定时器是在0s后执行,立即执行,他也是会等待执行栈执行完再执行定时器的任务
promise
promise 差不多 但是他是放在另外一个队列中
javascript
console.log("1")
Promise.resolve(2).then(()=>console.log("2"))
console.log("3")
// 打印的结果是是
//1
//3
//2宏队列和微队列
宏队列
- setTimeout
- setInterval
- I/0
- requestAnimationFrame
微队列
- process.nextTick
- MutationObserver
- Promise then catch finall
执行的顺序是 执行栈-》微队列 -> 宏队列
javascript
console.log("1")
setTimeout(()=>{
console.log("2")
},0)
Promise.resolve(3).then((res)=>console.log(res))
console.log("4")