1



setInterval()Javascriptで 使用する場合のプログラムの制御フローが本当にわかりません。以下に示すように、実行に100msの時間を必要とする関数を、時間20msのメソッドに
パラメータとして与えるとSetInterval()

       setInterval(function{
                      for(var i=0;i<1000000;i++)
                           console.log(i)
                           },20);

20ミリ秒後にsetInterval()再度呼び出すと、何が起こりますか??
ありがとう:)

追加: 単にループすることと、ループに setInterval を使用することと、停止に clearInterval を使用することの主な違いは何ですか??
これをチェックしてください http://www.sitepoint.com/multi-threading-javascript/

4

3 に答える 3

1

setIntervalJavascriptタイマーです。常に覚えておいてください:Javascriptでは、タイマーの遅延は保証されていません。ブラウザのすべてのJavaScriptは単一のスレッドで実行されるため、非同期イベントは、実行が開始されたときにのみ実行されます。

var some_function = function() { 
    for (var i=0; i < 1000000; i++) { 
        console.log(i); 
    } 
};
setInterval(some_function, 20);

この例を実行すると、JavaScriptがタイマーを開始し、20ミリ秒で実行されますsome_function

完了するまでに100ミリ秒かかると仮定するとsome_function、関数の実行が終了した約100ミリ秒後に、JavaScriptは実行を待機しているものを確認するために周りを見回します。

setInterval実行が開始されてから約20ms後に、some_function(によって設定されたタイマーによってsetInterval)実行するための別の要求が受信されたことがわかります。コマンドを受信した時点では、JavaScriptの実行がビジー状態であったため、コマンドを実行できませんでしたsome_function

操作の実行をブロックするものはsetIntervalもうないため、JavaScriptは操作を再実行します。setIntervalタイマーが開始されてから約120ミリ秒が経過し、明らかに連続してsome_function実行されます。

于 2012-09-15T16:49:15.880 に答える
1

最初に、閉じ括弧が欠落しているため、JavaScriptを修正することから始めましょう。

setInterval(function() {
    for(var i = 0; i < 1000000; i++) {
        console.log(i);
    }
}, 20);

これは、次と同等です。

function loopAndDump() {
   for(var i = 0; i < 1000000; i++) {
       console.log(i);
    }
}

setInterval(loopAndDump, 20);

また:

setInterval(function() { loopAndDump(); }, 20);

これで、何が起こるかを理解しやすくなりました。loopAndDump関数は20ミリ秒ごとに定期的に呼び出されます。この関数は、単に0から1000000までループし、カウンターをコンソールにダンプします。また、このプロセスが定期的に関数を実行するのを停止したい場合は、stopInterval関数を使用して、setInterval関数によって返される結果を引数として渡すことができます。

関数を1回だけ実行する場合は、 setTimeoutメソッドを使用できます。

setTimeout(function() {
    for(var i = 0; i < 1000000; i++) {
        console.log(i);
    }
}, 20);

これで、JavaScriptインタープリターがsetTimeout行に到達してから20ミリ秒後に、ループが1回だけ実行されます。

于 2012-09-15T16:28:31.853 に答える
0

20 ミリ秒後に再度呼び出されることはありません。

Javascript は厳密にシングル スレッドであるため、関数が実行されている限り、イベントは処理されません。インターバル タイマーは 20 ミリ秒後にイベントをトリガーしますが、関数が終了するまで処理されません。

于 2012-09-15T16:34:40.893 に答える