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 的函数,同样的事情也是如此 - 这是非常安全的。