断続的な通話
JavaScript では、setInterval が一定の間隔で繰り返し呼び出されることがよくあります。
setInterval() メソッドは 2 つのパラメーターを受け取ります。最初のパラメーターは文字列または関数で、2 番目のパラメーターは繰り返し間隔の長さを示すミリ秒単位の数値です。
パラメータは文字列です
最初に渡されるパラメータが次のように文字列の場合:
setInterval("alert('this is a string.')",1000);
ここでの文字列は JavaScript コードの一部であり、渡される eval() 関数のパラメーターと同じです。内側と外側に 2 つの引用符がある場合、その引用符は同じであってはいけないことに注意してください。
setInterval() は数値 ID を返します。この ID は計画された実行コードの一意の識別子であるため、繰り返される操作をキャンセルするために使用できます。 SetInterval() は、操作をキャンセルするためのメソッド、clearInterval() に対応します。もちろん、繰り返しの操作をキャンセルしたい場合は、実行が完了する前に、clearInterval() を配置する必要があります。
例:
var intervalId=setInterval(...); clearInterval(intervalId);
最初に ID を取得し、次にその ID を clearInterval() に渡します。キャンセル操作は setInterval() に続くため、何も起こらなかったかのようにすぐにキャンセルできます。
パラメータは関数です
渡されるパラメータが文字列の場合、パフォーマンスが低下する可能性があるため、通常の状況では、関数を渡す方法が最も一般的に使用されます。
は次のとおりです:
var num=0; function increNum(){ num++; if(num>=10){ clearInterval(intervalId); alert('over'); } } intervalId=setInterval(increNum,500);
このプログラムは incrNum 関数を設定し、パラメータとして setInterval() に渡します。同時に、実行中の操作がキャンセルされ、警告ボックスが表示されます。
タイムアウト呼び出し
タイムアウト呼び出しは断続的な呼び出し setTimeout() に似ています。これも 2 つのパラメーターを受け取ります。最初のパラメーターは JavaScript コードを含む文字列または関数にすることができ、2 番目のパラメーターは遅延時間と setInterval() です。メソッドのパラメータは同じです。
ただし、ここで注意すべき点があります:
遅延時間は、設定された遅延後にプログラムが必ず実行されることを意味するものではありません。
なぜですか?
JavaScript はシングルスレッド インタプリタであるため、一定時間内に 1 つのコードのみを実行でき、複数のコードを同時に実行することはできません。そのため、JavaScript にはタスク キューが存在します。実行されるタスクが順番にキューに配置されます。設定された遅延時間は、現在のタスクがタスク キューに追加されるまでの時間です。現在実行中のタスクがない場合、タスク キューに追加されたコードはすぐに実行されます。現在実行中のコード セグメントがある場合、新しく追加されたタスクはコード セグメントの実行後にのみ実行されます。
同様に、setTimeout() にも戻り ID があり、この数値 ID を使用してタイムアウト呼び出しをキャンセルすることもできます。対応するキャンセル メソッドは、clearTimeout() です。
ここでは、タイムアウト呼び出しメソッドを使用して、断続的な呼び出しで繰り返し実行されるコードをコピーします。
var num=0; function increNum(){ num++; if(num<=10){ setTimeout(increNum,500); }else{ alert('over'); } } setTimeout(increNum,500);
このプログラムは、繰り返しの操作を完了し、10 回後に操作を終了することもできます。上記の setInterval() との違いは、返された数値 ID を使用しないことです。
setInterval() は繰り返し実行されるため、常に数値 ID が返されるため、この数値 ID は常に追跡する必要があり、setTimeout() は実行後は実行されなくなるため、必要ありません。返された数値 ID を追跡するため、これにより一定の利便性がもたらされます。
さらに、後者の断続的な呼び出しが、前の断続的な呼び出しが終了する前に呼び出される可能性があります。この状況は、関数の実行時間が断続的な呼び出し時間よりも長い場合に発生するため、まとめると、setTimeout() を使用する方が良いでしょう。断続的な通話をシミュレートする方法。
もちろん、比較的単純なプログラムで setInterval() を使用するのに大きな問題はありません (ある文を突然思い出しました、存在は妥当です~~~~)。