我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。
本文作者:千寻
什么是事件循环?
我们为什么需要事件循环?对于 JavaScript 是一门单线程语言我们是肯定的,JavaScript 单线程的特性保证了渲染和 JavaScript 的正常运行,但同时也存在一定的限制。理想情况下我们希望所有任务是串行执行的,假设串行中存在一个耗时很多的任务时,会阻塞后续任务的运行,这种情况我们怎么去解决呢?这个时候就需要我们的事件循环来处理了。
让人意外的setTimeout
菜鸟教程:setTimeout() :在指定的毫秒数后调用函数或计算表达式
console.log(1);
setTimeout(()=>{ console.log(2);
},0)
for (let i = 0; i < 5000; i++) { let sum = 0;sum += i;
}
console.log(3);
猜猜上面这段代码执行结果是多少呢?根据 Event Loop 机制我们知道答案是1、3、2。但是针对这段代码中有一个疑问点,0ms 是指 0ms 后执行 callback 吗?答案是否定的,定时器任务被维护在定时器线程中,添加一个定时器时开始计时这个任务,0ms 后会将 callback 添加到事件队列中,