递归调用setTimeout的JavaScript代码是否会造成栈溢出?
结论:这段代码不会导致栈溢出
原因分析:
axios.get()返回的是Promise对象,它的.then()和.catch()回调都属于异步微任务,会在当前调用栈完全清空后才执行,不会在原调用栈里堆叠层级。- 最关键的是最后一步的
setTimeout:它属于异步宏任务,会在5秒后把内部的some_function()调用放到宏任务队列。等到执行这个回调时,之前所有的调用栈早就已经被销毁清空了。 - 每次
some_function()的调用都是在全新的调用栈里启动的,不存在调用栈层级持续累积的情况,自然不会触发栈溢出。
小补充:
你的代码最后少了一个闭合的},补上才能正常运行,但这和栈溢出问题无关。
内容的提问来源于stack exchange,提问作者Paul Mantziaris
相关产品推荐
相关产品推荐

