1

2番目の関数がスタックオーバーフローを引き起こさない理由を誰かが説明できますか?

//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 に答える