一.消息队列
调用栈:当前正在执行的代码
消息队列:等待执行的代码
示例代码:
setTimeout(() => {
console.log('love')
}, 2000);
setTimeout(() => {
console.log('why')
}, 1000);
for(let i = 0 ; i<10000 ; i++){
console.log('always')
}
肯定是先执行的同步代码,for循环输出'always',但是循环次数多,而一直在执行的这一块代码,前面两个延时器的调用输出就会暂时停下,等到这串同步代码执行完毕后才会执行,此时的同步代码就位于调用栈,而why,和love则是排在消息队列中的,并且因为why的延时短,所以它相较于love先执行,排在前面消息队列的前面
执行顺序:同一模块队列中,先微后宏
所以:
调用栈:for循环console.log('always')
消息队列:'why'调用函数,'love'调用函数
二.EventLoop
EventLoop:不停循环检查调用栈里是否有代码,如果没有,就把消息队列首位的函数,放到调用栈去执行