0

私は再帰的な方法で自分自身を呼び出すjavascriptで書かれた関数を持っています:

function f(attempt){
    if (attempt + 1 <= 10) {
        setTimeout(f(attempt + 1),2000);
    }
}
f(0);

理由は不明ですが、関数は事実上 10 回呼び出されますが、遅延はありません。setTimeout は関数 f をすぐに実行するようです。

ただし、これを行うと、すべて正常に動作します:

function f(attempt){
if (attempt + 1 < 10) {
    setTimeout(function(){f(attempt + 1);},2000);
}}
f(0);

説明はありますか?このコードは Cucumber のテスト用に書かれているためですか?

4

3 に答える 3

2
setTimeout(f(attempt + 1),2000);

上記のコードは setTimeout 関数を呼び出し、関数を渡して呼び出す代わりに、 f() 関数の結果を渡し、その場で呼び出されます。

  setTimeout(function() { f(attempt + 1) },2000);

ただし、この場合、2000 秒で呼び出される関数への参照を渡しているため、その場で関数自体を評価しません。

于 2014-04-29T14:49:16.820 に答える