setInterval 和 setTimeout 如何工作?

新手上路,请多包涵

我处境尴尬

我使用纯 JavaScript 工作了将近 3 年,我知道 JavaScript 是 单线程 语言,您可以使用 setIntervalsetTimeout 函数模拟异步执行,

但是当我想到它们如何工作时,我无法清楚地理解它。那么这些函数如何影响执行上下文呢?

我想在特定时间只运行代码的一部分,然后切换到另一部分。如果是这样,那么很多 setIntervalsetTimeout 调用会影响性能吗?

原文由 Taron Mehrabyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 205
1 个回答

Javascript 是单线程的,但浏览器不是。浏览器至少有三个线程:Javascript引擎线程,UI线程,定时线程,其中 setTimeoutsetInterval 的定时是由定时线程完成的。

当调用 setTimeoutsetInterval 时,浏览器中的计时器线程开始倒计时,当时间到时将回调函数放入 javascript 线程的执行堆栈中。回调函数不会在堆栈中它上面的其他函数完成之前执行。所以如果时间到还有其他耗时函数在执行, setTimeout 的回调就不会及时结束。

原文由 CDT 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏