Self-Invoke JavaScript 函数是否会导致堆栈溢出异常
Does Self-Invoke JavaScript function will causes stack overflow exception
这里我有一个在 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
递归调用自身的 promises 的函数,同样的事情也是如此 - 这是非常安全的。
这里我有一个在 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
递归调用自身的 promises 的函数,同样的事情也是如此 - 这是非常安全的。