基本上我正在尝试做的事情归结为
function a() {
// Do stuff that waits for things etc
b(a);
}
function b(f) {
f()
}
function a(){b(a); };函数b(f){f(); };一个() 这会在一段时间后导致过多的递归错误。显然javascript不支持尾递归,因此也无法正常工作。因为我不想立即执行代码,所以我想不出在这里使用循环的任何方法。所以任何方式做到这一点还是不可能?
如果之前有人问过这个问题,我也很抱歉,找不到任何帮助。
编辑:在任何人问之前,不,我实际上并没有使用setTimeout
,因此setIntervall
不是一个选项。
再次编辑:好吧希望这表明我正在努力做得更好。我需要在等待事情再次完成后调用相同的代码,而不是实际将它放在循环中并阻止程序。
答案 0 :(得分:2)
因为每次调用a()
都会在下次调用之前返回,所以不会进行递归。运行时系统重复对该功能进行单独调用,并且在任何给定时间都不会有多次呼叫。
打破它:
a()
来启动循环a()
"的调用确实存在问题"然后调用setTimeout()
a()
的原始通话完成a()
此后的循环就会重复。
编辑也许我应该更明确:递归这个词指的是一个函数直接或间接调用自身(同步)的过程。像:
function fibonacci(n) {
return fibonacci(n - 1) + fibonacci(n - 2);
}
我们在OP中发布的代码中有什么不同。在该函数中没有调用a()
(除非OP遗漏了一些重要的细节)。相反,函数的引用正在移交给系统。通过该引用的呼叫不会在原始呼叫结束后很长很长时间内发生。