首页 > 解决方案 > 让递归函数永远运行?

问题描述

我遇到了一个函数,它的setTimeout内部超时呈指数增长(timeout *= 2)

let timeout = 10000
function foo() {
    // doSomething without breaking, returning
    setTimeout(foo, timeout)
    timeout *= 2;
}
foo()

似乎这不应该是一个问题,并且直观地感觉就像setInterval已经在做同样的事情(有一个无限循环,直到它被取消,如果有的话),但是,我的问题在于方法本身。

标签: javascriptfunctionloopsparadigms

解决方案


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

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

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


推荐阅读