实践:事件循环
- 代码示例
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve('3').then(res => console.log(res));
console.log('4');
上述的代码的输出结果是什么
-
1和4肯定优先输出,因为他们会立即方式堆栈的执行上下文中执行,3这个then回调函数会被放入微队列中优先处理,而计时器会放入回调队列中等待微队列执行完毕后再放入调用堆栈中执行
-
所有回调队列中的代码是无法保证执行效率的,我们可以在用一个Promise来执行一个长时间的一个微队列
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve('3').then(res => console.log(res));
Promise.resolve('4').then(res => {for (let i = 1; i < 100000000000; i++) {}console.log(res);
});
console.log('5');
- 如果微队列需要等待很长的时间,所以对于回调队列中的函数我们无法保证它的执行效率