递归函数中的奇怪行为

时间:2012-10-23 20:03:20

标签: javascript jquery recursion

有人可以解释为什么第二个函数不会给我们带来堆栈溢出吗?

//stack overflow on call
function test1() {
    test1();
}
//no stack overflow, nor beer
function test2() {
    setTimeout(test2, -500); //back to the future
}

1 个答案:

答案 0 :(得分:8)

因为它不是递归的。 test2函数能够返回,一段时间之后,setTimeout通过创建的匿名函数调度另一个调用。

显然,你不能回到过去。 setTimeout的持续时间最短。


FWIW,匿名功能是不必要的。你可以做setTimeout(test2, -500)