1,宏隊列:用來保存 待執行的宏任務(回調),
比如:定時器回調 、DOM事件回調、ajax回調
2,微隊列:用來保存待執行的微任務(回調),
比如:promise的回調、MutationObserve的回調
3,JS執行時會區別這 2個隊列
JS引擎首先必須先執行所有的初始化同步任務代碼
每次准備取出第一個宏任務執行前,都要將所有的微任務一個一個取出來執行
setTimeout(()=>{ //立即放入宏隊列 console.log('setTimeout1') Promise.resolve(3).then( value => { //立即放入微隊列 console.log('onResolved3()', value) } ) },0) setTimeout(()=>{ //立即放入宏隊列 console.log('setTimeout2') },0) Promise.resolve(1).then( value => { //立即放入微隊列 console.log('onResolved1()', value) setTimeout(()=>{ console.log('setTimeout3', value) },0) } ) Promise.resolve(2).then( value => { //立即放入微隊列 console.log('onResolved2()', value) } )
setTimeout(() => { console.log("0") }, 0) new Promise((resolve, reject) => { console.log("1") resolve() }).then(() => { console.log("2") new Promise((resolve, reject) => { console.log("3") resolve() }).then(() => { console.log("4") }).then(() => { console.log("5") }) }).then(() => { console.log("6") }) new Promise((resolve, reject) => { console.log("7") resolve() }).then(() => { console.log("8") })
1 7 2 3 8 4 6 5 0