1掘剪、JS是單線程語(yǔ)言平委,包括同步任務(wù)、異步任務(wù)夺谁,異步任務(wù)又包括宏觀任務(wù)和微觀任務(wù)
2廉赔、執(zhí)行順序:同步任務(wù)——>微觀任務(wù)——>宏觀任務(wù)
3、宏觀任務(wù)的方法有:script(整體代碼)匾鸥、setTimeout昂勉、setInterval、I/O扫腺、UI交互事件、postMessage村象、MessageChannel笆环、setImmediate(Node.js 環(huán)境)
4、微觀任務(wù)的方法有:Promise.then厚者、MutaionObserver躁劣、process.nextTick(Node.js 環(huán)境),async/await實(shí)際上是promise+generator的語(yǔ)法糖库菲,也就是promise账忘,也就是微觀任務(wù)
5、實(shí)例:
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
解析:
(1)從上到下,先走同步任務(wù)隊(duì)列鳖擒,再走異步任務(wù)隊(duì)列
(2)同步任務(wù):script start → async1 start → async2 → promise1 → script end
(3)微觀任務(wù):async1 end → promise2
(4)宏觀任務(wù):setTimeout