javascript - 自调用JavaScript函数会导致堆栈溢出异常吗

标签 javascript function settimeout stack-overflow

这里我有一个在 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/

相关文章:

javascript - 怎么理解这个Promise执行顺序呢?

javascript - 时间跟踪解析器

javascript - 以编程方式在 HTML5 SVG 中添加位图图像

c - 部分应用 C 中的函数

javascript - JavaScript 中 setInterval 与 setTimeout 的混淆

javascript - 正确使用setTimeout

javascript - 函数声明的困惑

javascript - 使属性可调用或不可调用

linux - getaddrinfo() 是系统调用吗?

java - 如何设置InputStream.read的读取超时时间?