プログラミングの世界では、コールバック関数は非同期プログラミングの重要な部分です。しかし、構文内の正確に何が非同期実行をトリガーするのでしょうか?驚くべきことに、答えは構文自体ではなく、基礎となる実装の詳細にあります。
コールバックの非ブロック性の解読
コールバック関数の構文は、コールバック関数を非同期として明示的に宣言します。次の例を見てみましょう。
どちらの例でもコールバック関数を使用していますが、最初の例のみが非同期であり、setTimeout を使用して 100 ミリ秒遅延されています。 2 番目のメソッドは同期的に実行され、配列をただちに反復処理します。
コールバックの動作を決定する唯一の信頼できる方法は、ドキュメントを参照するか、テストを実行して実行時間を確認することです。
非同期関数の背後にある魔法
JavaScript は言語として、本質的に関数の非同期実行を提供しません。これを実現するには、別の非同期関数 (setTimeout や Web ワーカーなど) を利用するか、関数を C で記述します。
setTimeout などの C コード化された関数は、イベント ループを通じて非同期性を実装します。
イベント ループと非同期実行
イベント ループは、Web ブラウザーのアーキテクチャの基本的な部分です。 I/O 操作をノンブロッキングで処理し、複数のタスクを同時に実行できるようにします。
イベント ループは主に select() または C の同様の関数に依存して I/O イベントを監視します。データが利用可能になると、インタープリターはその I/O チャネルに関連付けられた適切なコールバックを呼び出します。
タイムアウト管理と Web ワーカー
イベント ループはタイムアウト イベントをシームレスに処理し、ウェブワーカー。 select() に渡されるタイムアウトを管理することで、将来実行するコールバックをスケジュールできます。別のスレッドで実行される Web ワーカーも、イベント ループと対話してメイン スレッドと通信します。
追加リソース
ノンブロッキングのより深い理解については、 C での I/O プログラミングについては、次を参照してください: http://www.gnu.org/software/libc/manual/html_node/Waiting-for-I_002fO.html
さらに詳しい情報については、次の記事を参照してください。
以上が明示的な構文がないにもかかわらず、コールバック関数が非同期で実行されることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。