我处境尴尬,
我使用纯 JavaScript 工作了将近 3 年,我知道 JavaScript 是 单线程 语言,您可以使用 setInterval
和 setTimeout
函数模拟异步执行,
但是当我想到它们如何工作时,我无法清楚地理解它。那么这些函数如何影响执行上下文呢?
我想在特定时间只运行代码的一部分,然后切换到另一部分。如果是这样,那么很多 setInterval
或 setTimeout
调用会影响性能吗?
原文由 Taron Mehrabyan 发布,翻译遵循 CC BY-SA 4.0 许可协议
Javascript 是单线程的,但浏览器不是。浏览器至少有三个线程:Javascript引擎线程,UI线程,定时线程,其中
setTimeout
和setInterval
的定时是由定时线程完成的。当调用
setTimeout
或setInterval
时,浏览器中的计时器线程开始倒计时,当时间到时将回调函数放入 javascript 线程的执行堆栈中。回调函数不会在堆栈中它上面的其他函数完成之前执行。所以如果时间到还有其他耗时函数在执行,setTimeout
的回调就不会及时结束。