Javascript 让递归函数永远运行?

Javascript 让递归函数永远运行?,javascript,function,loops,paradigms,Javascript,Function,Loops,Paradigms,我遇到一个函数,里面有一个setTimeout,超时呈指数增长(timeout*=2) 这似乎不应该是一个问题,直觉上感觉setInterval已经在做同样的事情了(有一个无限循环,直到它被取消为止),然而,我的问题在于方法本身 这是否会导致内存泄漏 仍然限制对函数的调用次数是否更好/更清晰 其他语言会使用这种方法吗?或者JS世界之外有不同的思维模式吗 这不是递归函数调用。调用setTimeout将导致JavaScript事件循环稍后调用foo 此代码不会导致堆栈溢出或任何此类问题。它应该是完

我遇到一个函数,里面有一个
setTimeout
,超时呈指数增长
(timeout*=2)

这似乎不应该是一个问题,直觉上感觉
setInterval
已经在做同样的事情了(有一个无限循环,直到它被取消为止),然而,我的问题在于方法本身

  • 这是否会导致内存泄漏
  • 仍然限制对函数的调用次数是否更好/更清晰
  • 其他语言会使用这种方法吗?或者JS世界之外有不同的思维模式吗

    • 这不是递归函数调用。调用
      setTimeout
      将导致JavaScript事件循环稍后调用
      foo

      此代码不会导致堆栈溢出或任何此类问题。它应该是完全安全的


      为了深入了解它是如何工作的,我建议阅读JS事件循环和微任务。

      这不是递归函数调用。调用
      setTimeout
      将导致JavaScript事件循环稍后调用
      foo

      此代码不会导致堆栈溢出或任何此类问题。它应该是完全安全的


      为了深入了解它是如何工作的,我建议阅读JS事件循环和微任务。

      这是否会导致内存泄漏

      -如果函数FOO()在超时再次调用之前运行到完成,则为否。应清除堆栈

      仍然限制对函数的调用次数是否更好/更清晰

      -是的,因为超时变量最终将溢出,并可能导致意外结果

      其他语言会使用这种方法吗?或者JS世界之外有不同的思维模式吗


      -取决于您使用的库/语言的计时器函数的工作方式。但这似乎是增加超时的一种简单有效的方法。

      这会导致内存泄漏吗

      -如果函数FOO()在超时再次调用之前运行到完成,则为否。应清除堆栈

      仍然限制对函数的调用次数是否更好/更清晰

      -是的,因为超时变量最终将溢出,并可能导致意外结果

      其他语言会使用这种方法吗?或者JS世界之外有不同的思维模式吗


      -取决于您使用的库/语言的计时器函数的工作方式。但这似乎是增加超时的一种简单有效的方法。

      @RobIII感谢您的评论。不,这里没有中断。正如其他人指出的,我对
      stackoverflow
      的看法是错误的;我的错。另请参见,@RobIII谢谢您的评论。不,这里没有中断。正如其他人指出的,我对
      stackoverflow
      的看法是错误的;我的错。另见,和
      let timeout = 10000
      function foo() {
          // doSomething without breaking, returning
          setTimeout(foo, timeout)
          timeout *= 2;
      }
      foo()