标签:ann 完成 log dia script 通过 event console 取值
JavaScript中的事件循环
javascript是单线程执行的,线程中的任务是按照顺序来执行,如果某个任务执行耗时较长,后面的任务就需要排队等待。任务分类:
解读:
宏任务与微任务
宏任务:script(主程序代码),setTimeout,setInterval,setImmediate(node),I/O操作,UI交互,postMessage,MessageChannel...
微任务:promise(原生promise,有些包装后的promise为宏任务),process.nextTick(),Object.observe,MutaionObserver...
区别:宏任务与微任务都是异步任务,都在同一个队列(进程)中,主要区别在于他们的执行顺序,Event loop的走向和取值
解读:
// 实例1
console.log(1)
new Promise((resolve, reject) => {
console.log(2)
resolve()
console.log(3)
reject()
console.log(4)
})
.then(() => {
console.log(5)
})
console.log(6)
// 1, 2, 3, 4, 6, 5
原因:
console.log(1)
setTimeout(() => console.log(2), 0) // fn1
setTimeout(() => console.log(3), 1000) // fn2
new Promise((resolve) => { // fn3
console.log(4)
resolve()
})
.then(() => console.log(5)) // fn4
setTimeout(() => console.log(6), 0) // fn5
console.log(7)
// 1, 4, 7, 5, 2, 6, 3
原因:
console.log(1)
setTimeout(() => console.log(2), 0) // fn1
console.log(3)
setTimeout(() => console.log(4), 1000) // fn2
Promise.resolve()
.then(() => { // fn3
setTimeout(() => console.log(5), 0) // fn4
setTimeout(() => console.log(6), 1000) // fn5
console.log(7)
Promise.resolve()
.then(() => console.log(8)) // fn6
})
.then(() => console.log(9)) // fn7
new Promise((resolve) => { // fn8
console.log(10)
resolve()
}).then(() => { // fn9
console.log(11)
})
setTimeout(() => console.log(12), 0) // fn10
console.log(13)
setTimeout(() => console.log(14), 1000) // fn11
// 结果
// 1, 3, 10, 13, 7, 11, 8, 9, 2, 12, 5, 4, 14, 6
原因:
参考文章
[1]JS事件循环机制(event loop)之宏任务/微任务
[2]阮一峰老师ES6入门
标签:ann 完成 log dia script 通过 event console 取值
原文地址:https://www.cnblogs.com/sk-3/p/12962029.html