这里我有一个在 setTimeout
回调函数中调用自身的函数:
function myFunc(){
// ... I'm doing my jobs here...
setTimeout(function(){
myFunc() //self invoke
},1)
}
myFunc(); // start point
这段代码最终会出现堆栈溢出异常吗?
提前致谢。
最佳答案
没有。通过 setTimeout 排队的函数仅在主线程(或当前正在进行的任何线程)完成后运行 - 不存在可能导致您担心的溢出的嵌套调用/嵌套环境。如果您运行此代码片段,您将永远不会遇到错误,例如:
function myFunc(i) {
if (i % 1000 === 0) console.log(i);
setTimeout(function() {
myFunc(++i)
})
}
myFunc(0);
对于调用通过 .then
递归调用自身的 Promise 的函数来说,同样的情况也是如此 - 这是完全安全的。
关于javascript - 自调用JavaScript函数会导致堆栈溢出异常吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50787494/