通常情况下,js的执行顺序是从上到下的, 但是遇到定时器以及异步的时候情况会有所不一样.这时候想要理解它,得用宏任务以及微任务来解释了.js异步执行的机制是遇到宏任务就先执行宏任务,接着执行所有的微任务.然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务.微任务包括Promise、MutaionObserver、process.nextTick;宏任务包括setTimeout、setInterval、I/O等(这是深层次的宏任务)
示例如下:
console.log('js-start');
setTimeout(function() {
console.log('定时器-1');
}, 0);
// 在申明的时候立即执行
const newPromise6 = new Promise(function(resolve, reject) {
resolve(console.log('Promise-1'));
setTimeout(function() {
console.log('定时器-2');
}, 0);
});
newPromise6.then(function() {
console.log('Promise-2');
setTimeout(function() {
console.log('定时器-3');
}, 0);
}).then(function() {
console.log('Promise-3');
});
console.log('js-end');
结果: