ホームページ > ウェブフロントエンド > jsチュートリアル > setTimeout と setInterval_Basic 知識についての深い理解

setTimeout と setInterval_Basic 知識についての深い理解

WBOY
リリース: 2016-05-16 17:16:32
オリジナル
1181 人が閲覧しました

半年ほど前に setTimeout と setInterval についての記事を公開しましたが、今戻って詳しく調べてみると、実際には多くの欠点や間違いがあることがわかりました。実際、setTimeout と setInterval は、文字通り理解しているほど単純ではありません。これら 2 つのメソッドを真にマスターして理解するには、JavaScript のシングルスレッド メカニズムから始める必要があります。

【本題】setTimeout と setInterval はどのように機能しますか?
js は単一スレッドで実行されることがわかっています。したがって、実際には、setTimeout と setInterval のいわゆる「非同期呼び出し」は、コードの実行キューにコード セグメントを挿入することによって実際に実装されます。

挿入時点の計算方法は?当然、タイマーと呼ばれるものを使用する必要があります。 setTimeout と setInterval を実行すると、タイマーは設定した時間に基づいてコードの挿入ポイントを「正確に」見つけます。キューが挿入ポイントまで「通常」に実行されると、タイマー コールバックがトリガーされます。これは、設定したコールバック関数です:

Copy code コードは次のとおりです。

function fn() {
/*
ここにいくつかのコードがあります
*/
setTimeout(function() {alert( 'ok! ')},1000);
}

上記の例は、簡単に理解できるはずです。しかし、タイマーは本当にそれほど正確でしょうか?コードキューの実行は本当に正常なのでしょうか?

【草を刈る】いわゆる「非同期」を再理解する
今学んだように、実際には setTimeout と setInterval はコードを挿入することでコードの遅延実行 (または非同期実行) を実装しているだけです。コードキュー)。しかし、実際には、いわゆる非同期は単なる幻想であり、スレッド上でも実行されます。
次に、コード挿入ポイント前のコード実行時間が、setTimeout または setInterval で渡された設定時間を超えた場合はどうなるのかという疑問が生じます。このコードを見てみましょう:
コードをコピーします コードは次のとおりです:

function fn( ) {
setTimeout(function(){alert('見えますか?');},1000);
while(true) {}
}

あなた このコードの実行結果はどうなると思いますか?答えは、アラートは決して表示されないということです。
これはなぜですか? while コードは実行されていないため、後から挿入されたコードは実行されません。
要約すると、実際、JS は結局のところシングルスレッド製品です。いくら「非同期」であっても、シングルスレッドの壁を突破することは不可能です。したがって、多くの「非同期呼び出し」(Ajax を含む) は、実際には単なる「擬似非同期」です。このような概念を理解していれば、setTimeout と setInterval を理解することは難しくないかもしれません。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート