ホームページ ウェブフロントエンド jsチュートリアル JavaScript コールスタックと setTimeout の使用法_JavaScript スキルの詳細な分析

JavaScript コールスタックと setTimeout の使用法_JavaScript スキルの詳細な分析

May 16, 2016 pm 05:41 PM
settimeout スタック

setTimeout は、次のような関数の実行を遅らせるために Javascript でよく使用されます。

コードをコピー コードは次のとおりです。 🎜>
setTimeout(function(){alert("Hello World");},1000);

実行後 1 秒遅れてアラート ウィンドウが表示されます。この文。次に、この段落をもう一度見てください。

コードをコピー コードは次のとおりです。
関数 a (){
setTimeout(function() {alert(1)}, 0);
alert(2)
}


支払いこのコードに注目してください。 setTimeout 遅延が 0 に設定されているため、遅延は 0 ミリ秒、つまり 1、2 ミリ秒間で実行されるように見えます。しかし、実際の実行結果は確かに 2,1 です。なぜ?これは、JavaScript 呼び出しスタックと setTimeout の関数から始まります。

まず、JavaScript はシングルスレッドです。つまり、同時に実行されるコードは 1 つだけであるため、各 JavaScript コード実行ブロックは他の非同期イベントの実行を「ブロック」します。次に、他のプログラミング言語と同様に、JavaScript の関数呼び出しもスタックを通じて実装されます。関数 a を実行するとき、最初に a がスタックにプッシュされます。 setTimeout がalert(1) に追加されていない場合は、次にalert(1)がスタックにプッシュされ、最後にalert(2)がスタックにプッシュされます。しかし、setTimeout をalert(1) に追加した後、alert(1) は新しいスタックに追加され、待機して「できるだけ早く」実行されます。これはできるだけ早く実行するという意味で、a のスタックが完了したらすぐに実行するため、実際の実行結果は最初にalert(2)、次にalert(1)になります。ここで、setTimeout は実際に現在の関数呼び出しスタックからalert(1) を削除します。次の例を見てください:




このような関数の目的は、次の文字をすべて削除することです。文字を入力するたびに現在の入力内容が表示されますが、実際の効果はアラートが表示されてボタンが押される前の内容です。ここでは、setTimeout(0) を使用してこれを実現できます。




このようにonkeydown イベントがトリガーされ、アラートが次の呼び出しスタックに入れられ、onkeydown イベントによってトリガーされたスタックが閉じられると実行が開始されます。もちろん、ブラウザにはニーズを満たす onkeyup イベントもあります。

このような setTimeout の使用法は、実際のプロジェクトでは依然として頻繁に発生します。たとえば、ブラウザは、DOM を変更する前に関数スタックが終了するまで賢明に待機します。この関数スタックでページの背景が最初に白から赤に設定され、その後白に戻された場合、ブラウザは DOM が変更されていないと判断します。変更され、これを無視するという 2 つの文があるため、setTimeout を通じて「白に戻す」関数を次のスタックに追加できます。これにより、背景色が変更されたことを確認できます (ただし、すぐには気付かない可能性があります)。

つまり、setTimeout は Javascript 関数呼び出しの柔軟性を高め、関数の実行シーケンスをスケジュールするのに非常に便利です。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

iPhone のスタンバイ モードをカスタマイズおよび編集する方法: iOS 17 の新機能 iPhone のスタンバイ モードをカスタマイズおよび編集する方法: iOS 17 の新機能 Sep 21, 2023 pm 04:01 PM

スタンバイは iOS 17 アップデートの新機能で、携帯電話がアイドル状態のときにすぐに情報にアクセスするための新しく強化された方法を提供します。 StandBy を使用すると、時間を確認したり、今後のイベントを表示したり、カレンダーを参照したり、現在地の天気予報の最新情報を入手したりすることができます。起動すると、充電中に横向きに設定すると、iPhone が直感的にスタンバイ モードに入ります。この機能は、ベッドサイドテーブルなどのワイヤレス充電ポイント、または日常業務中に iPhone の充電から離れているときに最適です。スタンバイ中に表示されるさまざまなウィジェットをスワイプすることで、さまざまなアプリのさまざまな情報にアクセスできます。ただし、好みや頻繁に必要な情報に基づいて、これらのウィジェットを変更したり、一部を削除したりすることもできます。それでは、詳しく見ていきましょう

iOS 17: スタンバイモードでウィジェットをカスタマイズする方法 iOS 17: スタンバイモードでウィジェットをカスタマイズする方法 Sep 17, 2023 pm 01:57 PM

スタンバイは、iOS 17 の新しいカスタマイズ可能なロック画面モードで、iPhone が充電中に横になっているときにアクティブ化できます。これは、iPhone の一種のスマート ディスプレイと考えてください。たとえば、キッチン、机、ナイトスタンドなどでデバイスを充電しているときに、離れた場所から閲覧できるさまざまな閲覧可能な情報画面にすばやくアクセスできます。カスタムスタンバイウィジェットは 3 つの画面で構成されており、iPhone のディスプレイを横にスワイプすることでアクセスできます。最初の画面にはインタラクティブなウィジェットが配置され、左にスワイプすると 2 番目と 3 番目の画面が表示され、それぞれフォト ギャラリーからの写真と大きな時計ディスプレイが表示されます。ウィジェット画面は、並べて表示される 2 つのインタラクティブなウィジェット スタックで構成されており、個別に上下にスワイプできます。これらのスタックはホーム画面ウィジェット スタックのようなものです

settimeout と setinterval の違いは何ですか settimeout と setinterval の違いは何ですか Aug 15, 2023 pm 02:06 PM

settimeout と setInterval の違い: 1. トリガー時間、settimeout は 1 回限りで、遅延時間を設定した後に関数を 1 回実行しますが、setinterval は反復的で、設定された時間間隔で関数を繰り返し実行します; 2. 実行時間、settimeoutは一度だけ実行され、setintervalはキャンセルされるまで繰り返し実行されます。

Golang のスタックの違いを深く掘り下げる Golang のスタックの違いを深く掘り下げる Mar 13, 2024 pm 05:15 PM

Golang は、同時プログラミングにおける独自の設計概念を備えた人気のあるプログラミング言語です。 Golang では、スタック (ヒープとスタック) の管理は非常に重要なタスクであり、Golang プログラムの動作メカニズムを理解するために不可欠です。この記事では、Golang のスタックの違いを詳しく掘り下げ、具体的なコード例を通してスタック間の違いと関連性を示します。コンピューター サイエンスでは、スタックはメモリを割り当てる 2 つの一般的な方法ですが、メモリ管理とデータ ストレージが異なります。

Javaスタックオーバーフロー例外を解決する方法 Javaスタックオーバーフロー例外を解決する方法 Nov 13, 2023 am 09:35 AM

Java スタック オーバーフロー例外を解決する方法には次が含まれます: 1. コード ロジックを変更して無限再帰と循環依存関係を回避する; 2. Java 仮想マシンのスタック サイズを増やす; 3. 末尾再帰最適化を使用する; 4. 再帰の代わりに反復を使用する; 5. を使用するマルチスレッド。 Java スタック オーバーフロー例外は通常、深すぎる再帰呼び出しまたは循環依存関係によって発生します。関数がそれ自体を再帰的に呼び出し、特定の時点で再帰を終了しない場合、スタック オーバーフローが発生します。これは、関数呼び出しごとに新しいスタック フレームがスタックに追加され、呼び出されすぎるとスタックがオーバーフローするためです。

ヒープとスタックの違いは何ですか ヒープとスタックの違いは何ですか Aug 10, 2023 am 10:12 AM

ヒープとスタックの違いは次のとおりです: 1. スタックは線形データ構造であるのに対し、ヒープはツリー状データ構造です; 2. スタックのメモリ割り当て方法は自動であるのに対し、ヒープのメモリ割り当てと解放は自動です。手動管理が必要; 3. スタックのメモリ割り当て速度は比較的速いが、ヒープのメモリ割り当て速度は遅い; 4. スタックのサイズは固定されているが、ヒープのサイズは必要に応じて動的に調整できる; 5. スタックはローカル変数、関数呼び出し、再帰などの管理に適しており、ヒープは長期間保存する必要があるデータ、動的データ構造、大規模データなどに適しています。

Java は StackTraceElement クラスを使用してメソッド呼び出しスタックを追跡します Java は StackTraceElement クラスを使用してメソッド呼び出しスタックを追跡します Jul 25, 2023 pm 03:21 PM

Java は StackTraceElement クラスを使用してメソッド呼び出しスタックを追跡します はじめに: ソフトウェア開発において、デバッグは非常に重要なプロセスであり、問​​題を特定し、エラーの原因を見つけるのに役立ちます。デバッグ プロセス中に、メソッド呼び出しのスタックを理解すると、問題をより早く見つけることができます。 Java では、StackTraceElement クラスを使用してメソッド呼び出しスタックをトレースできます。 1. StackTraceElement クラスの概要: スタック

PHP SPL データ構造: コードに新しい外観を与えるツールキット PHP SPL データ構造: コードに新しい外観を与えるツールキット Feb 19, 2024 pm 12:09 PM

PHPSPL データ構造: 概要 phpSPL データ構造は、スタック、キュー、配列、ハッシュ テーブルなどの共通データ構造のセットを提供する PHP 標準ライブラリ (SPL) のコンポーネントです。これらのデータ構造は、さまざまなデータ型を効率的に処理し、アプリケーション開発を簡素化する一貫したインターフェイスを提供するように最適化されています。主要なデータ構造 スタック スタックは、後入れ先出し (LIFO) 原則に従った順序付けされたコレクションです。スタックでは、最後に追加された要素が最初に削除される要素になります。 SPL は、スタックを表す SplStack クラスを提供します。次の例は、SplStack の使用方法を示しています: $stack=newSplStack();$stack->push(1

See all articles