js题讲解

console.log(1);
let a = setTimeout(() => {console.log(2)}, 0);
console.log(3);
Promise.resolve(4).then(b => {
console.log(b);
clearTimeout(a);
});
console.log(5);

首先这个题输出的是:1,3,5,4
解释:
1、开始会按js的同步顺序执行1,3,5
2、接着根据异步的宏任务和微任务顺序来解决
3、setTimout为微任务,promise为宏任务,因为,微任务优先级高于宏任务,所以先回执行promise,之后往下执行clearTimeout清除了计时器,所以这个时候不会输出来setTimeout中的内容
但是这是在一篇文章中截取的一段话:
但是js异步有一个机制,就是遇到宏任务,先执行宏任务,将宏任务放入eventqueue,然后在执行微任务,将微任务放入eventqueue最骚的是,这两个queue不是一个queue。当你往外拿的时候先从微任务里拿这个回掉函数,然后再从宏任务的queue上拿宏任务的回掉函数。 我当时看到这我就服了还有这种骚操作。
看看这篇文章:宏任务与微任务执行顺序

{宏任务一般包括:整体代码script,setTimeout,setInterval。
微任务:Promise,process.nextTick}

你可能感兴趣的:(js题讲解)