如果js任务都是同步进行 , 那么在遇到定时器或者网络请求的需要延迟会怎样 ? 页面可能会瘫痪 , 因为可能需要很长的时间来处理 , 待定时器都完成后再继续执行代码 .
因此执行任务分为同步任务和异步任务 , 而异步任务又分为微任务和宏任务 .
console.log(1) //同步任务
setTimeout(function() {
console.log(2)
new Promise(function(resolve) {
console.log(3)
resolve()
}).then(function() { //宏任务内部微任务
console.log(4)
})
})
new Promise(function(resolve) {
console.log(5) //同步任务
resolve()
}).then(function() {
console.log(6)
})
setTimeout(function() {
console.log(7)
new Promise(function(resolve) {
console.log(8)
resolve()
}).then(function() {
console.log(9)
})
})
console.log(10) //同步任务
定时器为异步宏任务 ,如图所示
打印结果为 1,5,10,6,2,3,4,7,8,9