由于JS是单线程的,但是JS又又异步处理概念,那么是怎么处理这个异步的东西的呢,这个时候就有了事件循环的概念
在JS里事件循环是很重要的概念,代码的执行栈都是以事件循环为标准的具体的事件循环概念这里就不详细解释描述,主要讲述事件循环中的执行优先级问题,这里涉及到到概念还有宏任务、微任务等
很多面试都遇到这段代码输出的顺序是什么这样的问题,下面就是这么一个简单的问题
function test() {
return new Promise((resolve, reject) => {
console.log('in promise');
resolve();
})
}
console.log('start');
setTimeout(() => {
console.log('in setTimeout');
},0);
test().then(() => {
console.log('in then');
});
console.log('end');
//start
//in promise
//end
//in then
//in setTimeout
以上输出可以自行验证,下面说说为什么会这么输出
- start最先输出没有疑问
- 执行到setTimeout是异步任务且是宏任务,插入宏任务执行队列继续执行
- 执行test遇到promise,立即执行promise内代码,输出in promise
- 执行到then(),是