javascript是一門單線程語言
Event Loop是javascript的執行機制
console.log('script0');
setTimeout(function(){
console.log('setTimeout0')
}, 10);
setTimeout(function() {
console.log('setTimeout1')
Promise.resolve().then(function() {
console.log('promise0');
});
}, 0);
new Promise(function(resolve) { //new promise.then()
console.log('promise1')
for( var i=0 ; i<10000 ; i++ ) {
i==9999 && resolve();
}
}).then(function() {
console.log('promise2');
});
console.log('script1');
執行結果依次爲
script0
promise1
script1
promise2
setTimeout1
promise0
setTimeout0
同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;
異步任務指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執行了,該任務纔會進入主線程執行。
同步任務:console.log()
微任務和宏任務都是異步任務
微任務:promise,process.nextTick()
宏任務:setTimeout、script、ajax、異步IO、setInterval()
new Promise(function(resolve,reject) {
/* 同步任務 */
}).then(function() {
/* 微任務 */
});
先執行同步任務、再執行微任務、然後宏任務