JSタイマー

3369 ワード

前書き:タイマーの整理.
JS単スレッド
  • Javascript言語の実行環境は「シングルスレッド」である.つまり、ブラウザはjsのメインスレッドにのみ割り当てられて、タスクすなわち関数を実行しますが、毎回一つのタスクしか実行できません.現在のタスクが完了するまで、後のタスクを実行します.これらのタスクは一つのタスクキューを形成して、
  • を実行します.
  • は、ある長時間タスクによる無意味待ちを避けるために、JSは非同期の概念を導入し、別のスレッドで非同期のタスクを管理する.
  • 同期タスクは、直接にメインラインの列で実行され、非同期タスクは、別のタスクキューに入り、メインスレッドをブロックしない.メインラインの列が空になったら、非同期キューに行って実行可能な非同期タスクがあるかどうかを確認します.
  • JSタイマー
    タイマーも非同期のタスクです.通常のブラウザには独立したタイマーモジュールがあります.タイマーの遅延時間はタイマーモジュールによって管理されます.あるタイマーが実行可能な状態になると、メインスレッドのキューに追加されます.
    基本タイマー
  • set Interval():指定された時間を周期としてサイクル実行
  • setTimeout():指定された時間だけ後に一回
  • を実行します.
    書き方
  • set Interval(expression,miliseconds)
  • setTimeout
  • において、expressionは文字列であってもよく、匿名関数であってもよく、または関数名であってもよく、milisecondsは遅延または繰り返し実行されるミリ秒数
  • である.
    setTimeout(function () {
        console.log('timeout');
    }, 1000);
    
    setInterval(function () {
        console.log('interval')
    }, 1000);
    
    //      timeout,  1S     interval
    
    タイマーをクリア
  • タイマークリアの方法:clear IntervalとclearTimeout(str)
  • タイマーには、タイマの番号、すなわち、いくつかのタイマの戻り値を取得した後に、clearInterval(戻り値)またはclearTimeout(戻り値)を呼び出して、タイマ
  • を停止するリターン値があります.
  • タイマーをクリアするには、タイマーを使用する際に、タイマーの戻り値
  • を記録する変数を定義しなければなりません.
    タイマーの戻り値:
     var timer1=window.setTimeout(function(){
                console.log("        ")
            },1000);
            console.log(timer1);//1
    var timer2=window.setTimeout(function(){
                console.log("        ")
            },1000);
            console.log(timer2);//2
    
    タイマーをクリア:
    
    var id=window.setInterval("somefunction",10000); 
    //       
    window.clearInterval(id); 
    id=null;
    
    
    注意:
  • setTimeoutは一回だけ実行しますが、実行後、タイマーはまだあります.ただ、無駄です.
  • タイマーがクリアされても、その戻り値はクリアされません.その後設定されたタイマの戻り値は、その戻り値に基づいて、後列
  • に続きます.
  • は、一般的にタイマーをクリアすると、クリアしたタイマーの変数を空にします.このように書くと、メモリを解放してもいいし、後のコードの判断にも便利です.
  • タイマーリレーパラメータ
    タイマーの書き方を見てみます.
  • 関数名で、パラメータset Interval(test,1000)がありません.1秒後に
  • を実行します.
  • 文字列で実行可能なコードsetInterval('test()',1000)/.1秒後に
  • を実行します.
  • 匿名関数set Interval(function(){}、1000);/1秒後に
  • を実行します.
  • は、関数set Interval(test()、1000)を呼び出します.直ちに実行します.
    関数名をハンドルとして使うときはパラメータを付けられませんが、多くの場合はパラメータが必要です.
    関数ハロー
    var userName="jack";
    //           
    function hello(_name){
          alert("hello,"+_name);
    }
    
    window.setTimeout(hello(userName),3000);//     ,   3    
    
    変更:
    window.setTimeout("hello(userName)",3000);
    
    注:他の方法を見てください.
    非同期のタイマー
    set Timeoutは例として:
    setTimeout(function(){
      console.log(0);
    },0)
     
    console.log(1);
     
    // 1
     
    // 0
    
  • みなさんは疑問に思うかもしれませんが、setTimeoutで設定されている遅延実行のミリ秒数は0です.すぐ実行するという意味ではないですか?実際にプログラムを実行すると、ブラウザはsetTimeoutおよびajax要求という方法をデフォルトとしています.(時間はかからないかもしれませんが)この場合のsetTimeoutは、遅延時間が0であるにもかかわらず、jsは直ちに実行せずに、スタックの同期タスクを実行した後、setTimeoutのコール機能を実行します.0を印刷します
  • とにかく、setTimeout(fn,0)は、あるタスクがメインスレッドの一番早い空き時間で実行されるように指定されるという意味で、つまり、できるだけ早く実行されるようにする.これは「タスクキュー」の末尾にイベントを追加しますので、同期タスクと「タスクキュー」の既存のイベントが全部処理されてから実行されます.
  • ですので、setTimeout()はイベントをタスクキューに挿入するだけで、現在のコード(実行スタック)が実行されるまで、メインラインのプロセスがその指定されたコールバック関数を実行する必要があります.しかし、現在のタスクが十分に時間がかかりますので、保証はできません.コールバック関数は必ずsetTimeout()で指定された時間で実行されます.例えば、10 msを指定してから実行しますが、現在のタスクは20 msを実行していますので、setTimeoutのコール関数は10 ms後にすぐ実行できません.setTimeoutがタスク・キューの中で第一位でない場合、まだ20 msを超えないかもしれない.