0

動的な数値を必要とするタイムアウト関数を実行している for ループがありますが、場合によっては増分ではなく最終結果を取得しています。

これが私のコードです(psはい、forループ内で「開始」変数を設定することは理想的ではないことに気づきました):

var new_answer_start = 0;
var seconds = 0;
for (start=0; start<50; start++) {
    new_answer_start = new_answer_start + 50;
    seconds = seconds + 10000; //10 seconds
    setTimeout(function(){reloadXMLDoc(xmlurl, new_answer_start);},seconds);
}

私が達成しようとしているのは、関数が 10 秒ごとに増加すると、new_answer_start が 50 の増分で実行されることです。代わりに、関数が 2500 から始まるたびに 10 秒ごとに出力されます (50 後の最後の数字のセット)ループ)。私は以前に同様の問題を抱えていましたが、クロージャーに関係していて、「let」を使用して修正しました。しかし、私が試したとき:

let new_answer_start = new_answer_start + 50;

NaN (not a number) エラーが発生し始めました。タイムアウトが秒単位 (10、20、30 など) で増加するのは奇妙だと思いましたが、関数に送信される変数はそうではありませんでした。これは、関数が 10 秒後に実行されると、変数のインクリメントが最後まで完了したためだと思います。では、「固定」番号を関数に送信するにはどうすればよいですか?

ここで同様の質問について調査した後、番号をクロージャーに入れてみました。

setTimeout(function(){reloadXMLDoc(xmlurl, (new_answer_start));},seconds);

しかし、これはまだ2500で出力を開始します。

4

2 に答える 2

0

実際のクロージャを使用してみてください:

setTimeout((function (new_answer_start) {
    return function () {
        reloadXMLDoc(xmlurl, new_answer_start);
    };
})(new_answer_start), seconds);
于 2013-04-29T17:17:51.930 に答える
-1
window.new_answer_start = 0;
var interval = setInterval(function() {
    window.new_answer_start = window.new_answer_start + 50;
}, 10000);
于 2013-04-29T17:20:05.267 に答える