直接上代码
console.log('1');
setTimeout(function() {
console.log('2');
new Promise(function(resolve) {
console.log('3');
resolve();
}).then(function() {
console.log('4')
})
})
new Promise(function(resolve) {
console.log('5');
resolve();
}).then(function() {
console.log('6')
})
setTimeout(function() {
console.log('7');
new Promise(function(resolve) {
console.log('8');
}).then(function() {
console.log('9')
})
})
console.log('10');
// 1 5 10 6 2 3 4 7 8
今天看了js的执行数序,在网上看到前端友人分享的,自己也学到了一些东西,特此记录一下,
我们知道js是单线程语言,为啥他不能是多线程,因为比如在多个线程同时操作dom,这个时候以谁为准,这个也是对js为啥不是多线程的一个反列。
js是单线程,但是在单线程中,我们是知道一个接一个去执行,当前一个任务执行完之后才能执行下一个任务,所以我们将任务分为同步任务和异步任务。
只有在同步任务执行完之后再去看任务队列中去执行异步的任务。
异步任务又细分宏任务和微任务
宏任务常见的有setTimeout和setInterval,微任务常见的有promise.then.catch,process.nextTick等。
在同级下只有执行完宏任务然后在执行微任务。
如果宏任务里还有微任就继续执行宏任务里的微任务,如果宏任务中的微任务中还有宏任务就在依次进行。
主线程任务——>微任务——>宏任务——>宏任务里的微任务——>宏任务里的微任务中的宏任务——>知道任务全部完成。在宏任务和微任务之间来回循环就叫做事件循环也叫做事件轮询。