- JavaScript 是一门单线程语言,异步操作都是放到事件循环队列里面,等待主执行栈来执行的,并没有专门的异步执行线程
- Macro Task (宏任务)和 Micro Task(微任务), 并且每个宏任务结束后, 都要清空所有的微任务
- Macro:script( 整体代码)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 环境)
- Micro:Promise、MutaionObserver、process.nextTick(Node.js 环境)
题目
console.log(1)
setTimeout(function() {
console.log(2)
}, 0);
const intervalId = setInterval(function() {
console.log(3)
}, 0)
setTimeout(function() {
console.log(10)
new Promise(function(resolve) {
console.log(11)
resolve()
})
.then(function() {
console.log(12)
})
.then(function() {
console.log(13)
clearInterval(intervalId)
})
}, 0);
Promise.resolve()
.then(function() {
console.log(7)
})
.then(function() {
console.log(8)
})
console.log(9)
// 1
// 9
// 7
// 8
// 2
// 3
// 10
// 11
// 12
// 13
console.log('1');
setTimeout(function() {
console.log('2');
}, 0);
Promise.resolve().then(function() {
console.log('3');
}).then(function() {
console.log('4');
});
console.log('5');
// 1
// 5
// 3
// 4
// 2
console.log('1');
setTimeout(function() {
console.log('2');
}, 10);
new Promise(resolve => {
console.log('3');
resolve();
setTimeout(() => console.log('4'), 10);
}).then(function() {
console.log('5')
})
console.log('6');
// 1
// 3
// 6
// 5
// 2
// 4
网友评论