javascript - 让递归函数永远运行?
问题描述
我遇到了一个函数,它的setTimeout
内部超时呈指数增长(timeout *= 2)
。
let timeout = 10000
function foo() {
// doSomething without breaking, returning
setTimeout(foo, timeout)
timeout *= 2;
}
foo()
似乎这不应该是一个问题,并且直观地感觉就像setInterval
已经在做同样的事情(有一个无限循环,直到它被取消,如果有的话),但是,我的问题在于方法本身。
- 这会导致内存泄漏吗?
- 仍然限制对函数的调用次数是否更好/更清晰?
- 其他语言会使用这种方法,还是在 JS 世界之外有不同的思维方式?
解决方案
这不是递归函数调用。调用setTimeout
将导致foo
稍后被 JavaScript 事件循环调用。
此代码不会导致堆栈溢出或任何此类问题。它应该是完全安全的。
要深入了解它是如何工作的,我建议阅读 JS 事件循环和微任务。
推荐阅读
- javascript - SAPUI5 SmartVariantManagement 不工作
- r - R中的减法时间
- elasticsearch - “stacktrace”:[“org.elasticsearch.transport.NodeNotConnectedException:[elasticsearch-master-1][10.244.5.215:9300]节点未连接”,
- ios - XCUITest ios 12 开关元素值,是否开启?
- tree - Segment Tree - 在树的每一层访问最多 4 个顶点
- r - 在R中搜索函数的最大值
- wpf - WPF MVVM Enable\Disable telerik:RadComboBox inside GridViewDataColumn from ViewModel
- c++ - C++ MFC CObject派生类抽象?
- discord.js - 为什么这个静音功能会显示所有隐藏的通道?
- python - 如何比较两个不同顺序的 Pandas 数据框?