1

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

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

1 回答 1

8

因为它不是递归的。该test2函数能够返回,并且稍后setTimeout通过创建的匿名函数安排另一个调用。

显然,你无法回到过去。setTimeout有最短持续时间。


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

于 2012-10-23T20:04:54.807 回答