ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript setTimeout メソッド - 知っておくべきことすべて

Javascript setTimeout メソッド - 知っておくべきことすべて

Patricia Arquette
リリース: 2024-11-10 17:57:03
オリジナル
1039 人が閲覧しました

Javascript setTimeout method - All you need to know

導入

JavaScript は、開発者が動的で対話型の Web アプリケーションを作成できるようにする強力なプログラミング言語です。 JavaScript の重要な機能の 1 つは、JavaScript の待機を有効にする Javascript setTimeout メソッド関数です。

setTimeout の効果的な使用方法を理解することは、JavaScript プログラムのタイミングとフローを制御するために重要です。この包括的なガイドでは、JavaScript の setTimeout メソッドの世界を深く掘り下げ、そのさまざまな機能を探っていきます。

初心者でも経験豊富な開発者でも、この記事は JavaScript プロジェクトで setTimeout の可能性を最大限に活用するために必要な知識をすべて提供します。

それでは、JavaScript でタイミングを計る技術を習得し、応答性が高く効率的な Web アプリケーションを作成するための新たな可能性を解き放つ準備をしましょう。

setTimeout の世界を詳しく調べて、その秘密をすべて発見しましょう!

前提条件

setTimeout の世界を詳しく調べる前に、JavaScript とその基本概念について基本的に理解しておくと有益です。変数、関数、および基本的な制御フロー (if ステートメントやループなど) に精通していると、この記事で説明する概念を理解しやすくなります。

JavaScript を初めて使用する場合、または復習が必要な場合は、基本を学ぶために利用できるオンライン リソースが多数あります。 MDN Web Docs、W3Schools、freeCodeCamp などの Web サイトでは、JavaScript の入門に役立つ包括的なチュートリアルとガイドを提供しています。

さらに、JavaScript の初心者には次の 2 冊の本を強くお勧めします:

頭から学ぶ JavaScript プログラミング: 脳に優しいガイド

JavaScript: 決定版ガイド: 世界で最も使用されているプログラミング言語をマスターする

(はい、無料で提供します)

これらのリソースに取り組むことで、JavaScript プログラミングの強固な基礎を獲得し、setTimeout の複雑さを探索し、Web 開発プロジェクトの新しい可能性を開くために必要な知識を身につけることができます。

setTimeout の複雑な説明に入る前に、JavaScript プログラミングのしっかりとした基礎を身につけていることを確認してください。

準備ができたら、setTimeout の機能を探索して、Web 開発プロジェクトの新たな可能性を解き放ってみましょう。

setTimeout の目的

まず、setTimeout の目的を理解しましょう。

setTimeout は、遅延を導入したり、イベントをスケジュールしたり、特定の時間間隔でタスクを実行したりするシナリオでよく使用されます。

少しわかりにくいですよね?

例でこれを理解してみましょう:

注: 現時点では構文について考えないでください。 Syntex については後ほど説明します。

関数を宣言したいが、すぐに呼び出すのではなく、一定期間後に呼び出すとします。

ここで setTimeout が登場します。関数の実行を遅らせる機能を提供します。

次のコードを見てください:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例には、単に挨拶メッセージをコンソールに記録する greetUser という関数があります。この関数の実行を 1 秒遅らせたいと考えています。

これを実現するには、setTimeout 関数を使用し、greetUser 関数を最初の引数として、1000 を 2 番目の引数として渡します。

以上です!

このコードを実行すると、JavaScript が 1 秒待機してから、「こんにちは、ユーザー!」という挨拶メッセージが表示されます。コンソールへ。

** setTimeout** の構文とパラメータ

setTimeout を効果的に使用するには、その構文とパラメーターを理解することが重要です。

setTimeout の基本構文は次のとおりです。

setTimeout(function, delay, param1, param2, ...);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

さまざまなコンポーネントを詳しく見てみましょう:

最初のパラメータは、指定した遅延後に実行する関数またはコード スニペットです。名前付き関数または匿名関数を使用できます。

2 番目のパラメーターの遅延は、コードの実行が開始されるまでの時間間隔をミリ秒単位で表します。指定された関数が呼び出されるまでの遅延時間を決定します。

param1、param2 などの追加パラメータはオプションです。これらを使用して、最初のパラメータで指定された関数に引数を渡すことができます。

これらの setTimeout パラメータを使用すると、関数の実行時の動作をカスタマイズできます。

setTimeout() **は、メソッドの呼び出しの結果として作成されたタイマーを識別する正の整数である **timeoutID を返します。 timeoutID は、別の記事で説明する clearTimeout() メソッドに渡すことでタイムアウトをキャンセルするために使用できます。

注: 構文がわかりにくい場合でも、心配する必要はありません。

このブログの今後のセクションでは、各パラメーターのさまざまな例と使用例を詳しく見ていきます。この記事全文を読むことで、setTimeout の効果的な使用方法を明確に理解できることを保証します。

この強力な JavaScript 関数の可能性を最大限に引き出すために、辛抱強く読み続けてください。

setTimeout コードの内訳

以前に使用したコードに何が起こったのかについてはすでに理解できたと思います。しかし、理解を強化するために、一緒にコードを分解してみましょう:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

このコード スニペット内:

  1. function キーワードを使用して、greetUser という関数を定義します。この関数は、コンソールに挨拶メッセージを出力する役割を果たします。

  2. setTimeout 関数を使用して、指定した遅延後の greetUser 関数の実行をスケジュールします。遅延は 1000 ミリ秒に設定されており、これは 1 秒に相当します。

  3. setTimeout に渡される最初の引数は、関数参照 greetUser です。これは、指定された遅延の後にどの関数を実行するかを setTimeout に指示します。

  4. 2 番目の引数 1000 は遅延をミリ秒単位で表します。コードの実行が開始されるまでの期間を決定します。

setTimeout を使用することで、JavaScript に 1 秒待機してから greetUser 関数を呼び出すように指示します。その結果、「Hello, user!」という挨拶メッセージが表示されます。コンソールに表示されます。

無名関数をコールバックとして使用する

前のコード例では、setTimeout 関数のコールバック関数として名前付き関数を使用しました。

ただし、setTimeout を使用すると、指定した遅延後に実行されるコールバックとして匿名関数を提供することもできます。

匿名関数は、実行されるコードが単純で、別の名前付き関数を必要としない場合によく使用されます。

これが例です:

setTimeout(function, delay, param1, param2, ...);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この場合、匿名関数はコールバックとして機能します。 1000 ミリ秒 (または 1 秒) の遅延後に、メッセージをコンソールに記録します。

console.log ステートメントを、遅延後に実行する任意のコードに置き換えることができます。 setTimeout で匿名関数をコールバックとして使用すると柔軟性が高まり、個別の関数宣言を必要とせずにコードをインラインで定義して実行できるようになります。

コールバック関数に引数を渡す

setTimeout コールバック関数では、パラメータや引数を簡単に渡すことができます。

パラメーターを受け入れる関数があり、遅延後に関数が実行されるときにそれらのパラメーターに特定の値を指定するとします。

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、greet 関数は 5 秒 (5000 ミリ秒) 待機するようにスケジュールされており、引数 John が name パラメーターとして渡されます。

特定の使用例に応じて遅延と引数値を調整できます。

このアプローチを使用すると、さまざまな値を引数として渡すことでコールバック関数の動作をカスタマイズでき、より動的で柔軟なコード実行が可能になります。

コールバック関数に引数を渡すための追加のヒントをいくつか示します。

  • コールバック関数には任意の数の引数を渡すことができます。
  • 引数は、setTimeout に渡されたのと同じ順序でコールバック関数に渡されます。
  • 可変数の引数をコールバック関数に渡す場合、引数オブジェクトを使用してそれらにアクセスできます。

以下に例を示します:

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、processArgs 関数は各引数を対応するインデックスとともにコンソールに出力します。出力は次のようになります:

setTimeout(function, delay, param1, param2, ...);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

文字列リテラルを渡す

関数の代わりに文字列を最初の引数として setTimeout に渡すと、潜在的な問題が発生する可能性があるため、通常はお勧めできません。

eval() の使用と同様の問題があります。

これは、文字列リテラルを setTimeout に渡す例です。

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この場合、文字列 "console.log('Hello World!');" は、タイムアウトが経過するとグローバル コンテキストのコードとして評価されます。

ただし、この方法で文字列を使用すると、評価が異なるコンテキストで行われ、ローカルのシンボルや変数が使用できない可能性があるため、問題が発生する可能性があります。

これらの問題を回避するには、代わりに関数を最初の引数として setTimeout に渡すことをお勧めします。これにより、コードが正しいコンテキスト内で実行され、ローカル シンボルにアクセスできるようになります。

コールバックとして関数を使用する別のアプローチを次に示します。

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

ログイン後にコピー
ログイン後にコピー

この例では、アロー関数がコールバックとして使用されます。アロー関数は、指定された遅延の後にコードを実行するための簡潔かつ安全な方法を提供します。

これにより、文字列リテラルを setTimeout に渡すことに関連する落とし穴が回避され、コードが正しいスコープ内で実行されることが保証されます。

文字列の代わりに関数を渡すことで、実行コンテキストのより適切な制御を維持し、ローカル変数またはシンボルへのアクセスに関する潜在的な問題を回避できます。

最大遅延値

JavaScript の setTimeout メソッド関数で設定できる最大遅延値は、JavaScript の実装とそれが実行されている環境によって異なります。

ほとんどの最新のブラウザーと JavaScript 環境では、最大遅延値は約 2^31 - 1 ミリ秒、つまりおよそ *24.85 * 日です。この最大値より大きい遅延値を設定しようとすると、自動的に最大許容値にクランプされます。

したがって、この最大遅延を超えるタスクをスケジュールする必要がある場合は、別のアプローチを検討するか、複数の setTimeout 呼び出しを組み合わせて使用​​する必要がある場合があります。

非常に長い遅延値は、実際の多くのシナリオでは信頼性が低く、実用的ではない可能性があるため、注意して使用する必要があることに注意してください。正確なタイミングや長い遅延が必要な場合は、そのような目的のために特別に設計された他のテクニックや API を検討することをお勧めします。

最大遅延値を超えるタスクをスケジュールするための代替アプローチをいくつか示します。

複数の setTimeout 呼び出しを組み合わせて使用​​します。これを使用すると、長いタスクを小さな塊に分割し、個別にスケジュールを設定できます。

バックグラウンド スレッドまたはプロセスを使用します。これは、メインスレッドやユーザー インターフェイスと対話する必要のないタスクを実行するために使用できます。

サードパーティライブラリまたはAPIを使用します。遅延の長いタスクのスケジュール設定をサポートするライブラリと API が多数用意されています。

最大遅延値を超えるタスクをスケジュールするための最適なアプローチは、タスクの特定の要件によって異なります。

これ 問題

メソッドで setTimeout を使用すると、メソッド内の this の値が予想と異なる this キーワードの問題が発生する可能性があります。

この問題は、setTimeout の動作方法と、それが使用する別の実行コンテキストが原因で発生します。

デフォルトでは、setTimeout を使用してメソッドが呼び出される場合、メソッド内の this 値は、代わりにウィンドウ (またはグローバル) オブジェクト に設定されます。あなたが意図したオブジェクト。

次の例に示すように、この動作は予期しない結果を招く可能性があります。

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

上記の例では、myMethodmyArray で直接呼び出される場合、この値は myArray に正しく設定されます。

ただし、myArray.myMethod とともに setTimeout を使用する場合、この値はデフォルトでウィンドウ オブジェクトになります。

この問題を解決するには、いくつかの解決策を採用できます。

  • ラッパー関数を使用します:

一般的なアプローチは、目的の this 値を明示的に設定するラッパー関数を使用することです。

setTimeout(function, delay, param1, param2, ...);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • ラッパー関数としてのアロー関数:

アロー関数は、独自の this 値をバインドせず、代わりに周囲のスコープから継承します。

この動作を利用して、コールバック関数内で予期される this 値を維持できます。

setTimeout を使用してアロー関数をコールバックとして使用する例を次に示します。

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この場合、アロー関数は独自の this バインディングを持たず、代わりに周囲のスコープからの this 値を使用します。これは myArray の期待値です。

アロー関数をコールバックとして使用すると、setTimeout およびメソッドを操作するときに、この問題に対する簡潔で便利な解決策が提供されます。

アロー関数には通常の関数と比較して動作にいくつかの違いがあることに注意することが重要です。そのため、その影響を考慮し、特定のユースケースに基づいて最適なソリューションを選択することが重要です。

function greetUser() {  
 console.log('Hello, user!') 
}  
setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • バインドを使用します: もう 1 つのオプションは、bind() メソッドを使用して、必要な this 値をメソッドにバインドすることです。
setTimeout(function, delay, param1, param2, ...);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

bind() を使用すると、指定された this 値に永続的にバインドされる新しい関数が作成され、setTimeout に渡されるとき、または他の場所で呼び出されるときに一貫性が保たれることが保証されます。

これらの解決策は、メソッドで setTimeout を使用する場合にこの問題を解決するのに役立ち、必要なコンテキストを維持し、予期しない動作を回避できるようになります。

ネストされたタイムアウト

ネストされたタイムアウトとは、setTimeout 関数が別の setTimeout のコールバック関数内で呼び出される状況を指します。

このアプローチは、時間指定された一連のイベントを作成したり、連続するアクション間に遅延を導入したりするために使用できます。

ネストされたタイムアウトを説明する例を次に示します。

function greetUser() {
  console.log('Hello, user!')
}

setTimeout(greetUser, 1000)
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、3 つの setTimeout 関数が相互にネストされています。各 setTimeout には独自のコールバック関数と遅延があります。

最初の setTimeout は 500 ミリ秒後に実行され、2 番目は最初のタイムアウトから 1000 ミリ秒 (1 秒) 後に実行され、3 番目は 2 番目のタイムアウトから 2000 ミリ秒 (2 秒) 後に実行されます。

このコードを実行すると、次の内容が出力されます:

setTimeout(function () {  
 console.log('This code executes after the delay') 
}, 1000)

ログイン後にコピー
ログイン後にコピー

タイムアウトをネストすることにより、異なる時間間隔で発生する一連のアクションを作成できます。これは、一連のイベントを調整する必要があるシナリオや、特定の操作間に遅延を導入する必要があるシナリオに役立ちます。

ただし、深くネストされたタイムアウトから生じる可能性のある潜在的な複雑さに留意することが重要です。ネストされたタイムアウトの数が増えると、コードの読み取りと保守が難しくなる可能性があります。

そのような場合は、非同期操作を処理する async/awaitライブラリ/フレームワーク を使用するなどの代替アプローチの方が適切な場合があります。

ネストされたタイムアウトは慎重に使用し、コードの複雑さと要件に応じて他のオプションを検討してください。

結論

setTimeout 関数は JavaScript の基本ツールであり、開発者が Web 上で動的でインタラクティブなエクスペリエンスを作成できるようにします。

setTimeout をマスターすると、タイミングを制御し、タスクをスケジュールし、洗練されたアプリケーションを構築できるようになります。このブログで共有された洞察と例により、setTimeout を効果的に活用し、JavaScript のタイマー機能の可能性を最大限に引き出す準備が整いました。

タイミング関連のタスクを処理し、遅延を管理し、よりインタラクティブで動的な Web アプリケーションを作成するための強力なツールを自由に使えるようになりました。

理解を深め、その可能性を最大限に引き出すために、setTimeout を練習して実験することを忘れないでください。この知識があれば、setTimeout の機能を活用し、JavaScript アプリケーションの機能を強化するための準備が整います。

コーディングを楽しんでください:)

リソース

  • https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout

  • https://www.javascripttutorial.net/javascript-bom/javascript-settimeout/

以上がJavascript setTimeout メソッド - 知っておくべきことすべての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート