JavaScriptのタイムアウト呼び出しと間欠呼び出しについて

2484 ワード

間欠コール
JavaScriptの間で休憩して呼び出しするのはよくあります.set Intervalは一定の時間間隔で繰り返して呼び出します.
set Interval()メソッドは2つのパラメータを受信します.最初のパラメータは文字列でもいいし、関数でもいいです.2番目のパラメータは1ミリ秒単位の数字で、繰り返し間隔の時間が長いことを表します.
パラメータは文字列です
最初の転送パラメータが文字列の場合、以下のようになります.

setInterval("alert('this is a string.')",1000);
ここの文字列はJavaScriptコードです.入ってきたeval関数のパラメータと同じです.内外の2つの引用符があれば、引用符は同じでなくてもいいです.
set Interval()は数値型のIDを返します.このIDは実行予定コードの一意識別子ですので、重複動作をキャンセルするために使用できます.set Intervalに対応する一つの操作をキャンセルする方法:clear Interval()は、当然、重複操作をキャンセルするなら、clear Interval()はまだ実行されていないときに置かなければならない.
たとえば:

var intervalId=setInterval(...);
clearInterval(intervalId);
まず私達はIDを取得して、その後にIDをclear Intervalに入力すればいいです.キャンセル操作はsetIntervalの後ろに付いていますので、すぐにキャンセルできます.発生していないのと同じです.
パラメータは関数です
伝達されたパラメータが文字列の場合、性能損失を引き起こす可能性があるので、一般的には一番多く使うのか、それとも一つの関数を伝達するのか.
以下のとおりです

var num=0;
function increNum(){
 num++;
 if(num>=10){
  clearInterval(intervalId);
  alert('over');
 }
}
intervalId=setInterval(increNum,500);
このセグメントプログラムはincreNum関数を設定し、パラメータとしてsetInterval()に伝達し、10回まで繰り返し実行すると、運転操作をキャンセルし、警告枠をイジェクトします.
タイムアウトコール
タイムアウト呼び出しと間欠呼び出しは同様であり、setTimeout()も2つのパラメータを受信し、最初はJavaScriptコードを含む文字列であっても良いし、関数でもあります.2番目のパラメータは遅延時間とset Interval()方法のパラメータは同じです.
ここで説明します.
遅延時間は設定された遅延後にプログラムが必ず実行されるというわけではありません.
なぜですか
JavaScriptはシングルスレッドのインタプリタなので、一定の時間でコードしか実行できません.複数のコードを同時に実行することはできません.したがって、JavaScriptにはタスクのキューがあります.実行するタスクは先着順にキューに並べられます.設定された遅延時間はこの時間を経て現在のタスクをタスクのキューに追加します.現在タスクが実行されていない場合、タスクのキューに追加されたコードは直ちに実行されます.現在実行中のコードセグメントがある場合、このコードセグメントが実行された後に新たに追加されたタスクを実行するしかありません.
同様に、set Timeout()にも一つの戻りIDがあり、この数値IDによりタイムアウトコールをキャンセルすることもでき、対応するキャンセル方法はclearTimeout()である.
ここでは、タイムアウトコール方法で、間欠コール中の繰り返し実行されたコードを複写します.

var num=0;
function increNum(){
 num++;
 if(num<=10){
  setTimeout(increNum,500);
 }else{
  alert('over');
 }
}
setTimeout(increNum,500);

このプログラムは、繰り返し操作を完了し、10回後に操作を終了することもできます.上記のsetIntervalとは違い、戻り値IDがないことです.
set Interval()は繰り返し実行しているので、いつも数値IDが戻ってきますので、この数値IDをずっと追跡しなければなりません.setTimeout()は実行が終わったら実行しないので、この戻り値IDを追跡する必要はありません.これは私達に便利をもたらします.
また、後の間欠コールは、前の間欠コールが終了していない前に呼び出される可能性があり、間欠コールよりも関数の実行時間が長い場合に発生するので、以上のように、setTimeout()で間欠コールをシミュレートするのが良い方法である.
もちろん、比較的簡単なプログラムでsetIntervalを使うのは問題ないです.