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() {
/* 微任务 */
});
先执行同步任务、再执行微任务、然后宏任务