ホームページ  >  記事  >  ウェブフロントエンド  >  setTimeout 学習の概要

setTimeout 学習の概要

高洛峰
高洛峰オリジナル
2017-02-08 16:13:151126ブラウズ

この記事では、setTimeout の原理、setTimeout(function(){..},0); の意味と setTimeout のパラメータの問題を主に紹介します。とても良い参考値です

概要紹介

今日ある記事を読んで、よく書かれていると思ったので、私なりに理解して勉強してみました。概要

原文:知っておくべきsetTimeoutの秘密

主な内容:

1. setTimeoutの原理

2. setTimeout(function(){.. },0)

3. setTimeout の this ポインターとパラメーターの問題

setTimeout の原理

まずコードの一部を見てみましょう:

var start = new Date();
 setTimeout(function(){
  console.log(new Date() - start);
 },500);
 while(new Date() - start <= 1000 ){}

出力は 1003 (数値は異なる場合がありますが、すべて 1000 より大きいです)

このような数値が出力される理由は、setTimeout が実行されるとコードが 500ms 後に実行キューに入れられるためです。ただし、while ループが実行され、while ループは 1000 ミリ秒を占有します。この 1000 ミリ秒の間、キュー内のすべてのタスクは while ループが終了するまで待機する必要があります。指定された時間後にタスクをキューに追加し、CPU が実行をスケジュールするのを待ちます。タスクがいつ実行されるかは保証されません

setTimeout(function(){..},0) の意味

時々次のようなコードを見たことがあります:

 setTimeout(function(){
  //...........
 },0);

前回の学習の後、コードがsetTimeoutに実行されると、タスクはすぐに実行キューに追加されると思いました。実際にはそうではありませんが、指定された遅延実行時間は 0 ですが、setTimeout には独自の最小遅延時間 (ブラウザによって異なります) があるため、0 が書き込まれた場合でも、setTimeout は最小遅延時間の後にタスクを追加します。実行キューで

を 0 に設定する目的は、タスクの実行順序を変更することです。ブラウザは現在のタスク キュー内のタスクの実行を終了し、その後 setTimeout キューに蓄積されたタスクを実行するため、次のような問題が発生します。

このように書くと、キーボードを押す前の入力ボックスの内容しか取得されません。これは、キーボードを押すと JavaScript エンジンが keydown イベント ハンドラーを実行し、その値が取得されるためです。入力ボックスの値が更新されるのはこの後ですので、入力ボックスの値(this.value)を取得する際には、入力ボックスの値は更新されません。

解決策は、入力ボックスの値を更新した後、その値を取得することです

setTimeoutのこのポインタとパラメータの問題

setTimeout 学習の概要setTimeoutのコールバック関数のこのポイントはウィンドウを指します

例:

window.onload = function(){
 document.querySelector(&#39;#one input&#39;).onkeydown = function(){
  document.querySelector(&#39;#one span&#39;).innerHTML = this.value;
 };
 document.querySelector(&#39;#two input&#39;).onkeydown = function(){
  setTimeout(function(){
  document.querySelector(&#39;#two span&#39;).innerHTML = document.querySelector(&#39;#two input&#39;).value;
  },0)
 }
 }

しかし、apply()、call()、およびbind()を使用してこのポイントを変更できます

setTimeoutには通常2つのパラメータがありますが、複数のパラメータを持つこともできます

例:

var a = 1;
 var obj = {
  a : 2,
  output : function(){
  setTimeout(function(){
   console.log(a);
  },0);
  }
 }
 obj.output(); //1

これらの多くのパラメータがコールバック関数で渡されるパラメータであることがわかります

setTimeout 学習まとめ関連記事の詳細については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。