【问题标题】:Does Self-Invoke JavaScript function will causes stack overflow exception自调用 JavaScript 函数是否会导致堆栈溢出异常
【发布时间】:2018-06-10 19:50:52
【问题描述】:

这里我有一个在setTimeout 回调函数中调用自身的函数:

function myFunc(){

    // ... I'm doing my jobs here...

    setTimeout(function(){
        myFunc() //self invoke
    },1)
}

myFunc(); // start point

这段代码最终会不会发生栈溢出异常?
提前致谢。

【问题讨论】:

    标签: javascript function settimeout stack-overflow


    【解决方案1】:

    没有。通过setTimeout 排队的函数仅在主线程(或当前正在进行的任何线程)完成后运行 - 没有可能导致您担心的溢出的嵌套调用/嵌套环境。如果你运行这个sn-p,你永远不会遇到错误,例如:

    function myFunc(i) {
      if (i % 1000 === 0) console.log(i);
      setTimeout(function() {
        myFunc(++i)
      })
    }
    myFunc(0);

    对于调用通过 .then 递归调用自身的 Promise 的函数也是如此 - 它非常安全。

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 1970-01-01
      • 2019-07-02
      • 2019-11-14
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2018-06-19
      • 2011-02-26
      相关资源
      最近更新 更多