有人可以解释为什么第二个函数不会给我们带来堆栈溢出吗?
//stack overflow on call
function test1() {
test1();
}
//no stack overflow, nor beer
function test2() {
setTimeout(test2, -500); //back to the future
}
答案 0 :(得分:8)
因为它不是递归的。 test2
函数能够返回,一段时间之后,setTimeout
通过创建的匿名函数调度另一个调用。
setTimeout
的持续时间最短。
FWIW,匿名功能是不必要的。你可以做setTimeout(test2, -500)
。