无Promise的JavaScript函数是否保证运行不中断?实例相关疑问
问题解答
结论
- 调用函数
f时,两次输出的x值一定相同。 setInterval的回调不可能在两次输出之间触发。
原因
JavaScript是单线程语言,代码执行遵循事件循环机制:
- 同步代码会优先进入执行栈连续执行,直到执行栈完全清空,才会去处理任务队列中的宏任务(比如
setInterval的回调)。 - 函数
f里的两次console.log(x)属于同步代码,会被依次连续执行,中间不会被任何宏任务打断,因此两次读取的x值必然一致,setInterval的回调也没机会在这期间触发。
相关概念参考
如果想深入了解,可查找以下概念:
- 事件循环(Event Loop)
- 宏任务(Macro Task)
- 执行栈(Call Stack)
内容的提问来源于stack exchange,提问作者ssamtkwon
相关产品推荐
相关产品推荐

