はじめに:
私たちは新しい知識と接触すると、一般的に3つの質問に遭遇する:何ですか?(使用するとき、行うために使用される)の使用は何ですか?どのように使用するには?
私たちは新しい知識を学ばなければならない問題であり、これらの3つの問題は、解決すべき。
まず、コールバック関数は何ですか?
いわゆるコールバック関数は次のとおりです。あなたの定義、あなたが呼び出すことはありませんが、最終的にそれが行われ、そのような機能は、コールバック関数です。
以下のような:
// 同期は、コールバック のlet ARR = [ 'A'、 'B'、 'C' ] // (値:T、指数:数値、配列:forEachの(callbackfn?任意thisArg、T [])=>ボイドを:) :ボイド; arr.forEach((値)=> { にconsole.log(値); // A、B、C }) // 非同期コールバック の$に.get(URL、callbackfn(データ ))
配列をループは、forEachの(callbackfnは)私たちはコールバック関数を渡すことを必要とするとき、私はここに渡され、この関数、矢印(匿名関数)の関数であり、
私の定義であり、私が電話をしてくれなかったが、それは最終的に実行します。
第二に、コールバック関数を使用することは何ですか?
、同期、非同期とは直接のリンクが存在しないと、コールバック関数は、コールバックは一つだけ実装、両方の同期コールバックして、彼らは非同期コールバックを持つことができ、
また遅れやイベントが私たちの仕事でたくさん持っているコールバック関数コールバックを、ハンドリングすることができます使用シナリオ。
だから、実際には、我々はコールバック関数を知らないではないことを、私たちはあなたが機能見たときに、単語の「コールバック」の中に残り
、それが混同されますが、実際には、それだけで、ただ単にパラメータ名ですしかし、この引数は関数です。そしてここでforEash高階関数は、の関数である
(受信されたパラメータの機能または出力機能が戻るの高次関数と呼ぶ関数として)数。
なぜ、コールバック関数を使用できますか?
(1)コールバック関数とJS JS-シングルスレッドおよび非同期機構に対して
JSは、シングルスレッドであるため、このデザインパターンは、私たちの便利な場所の多くを与え、我々は脳を燃焼させるために多くのコードを記述する必要はありません、さまざまなスレッド間の通信を考慮する必要があり、
それはエンジンが唯一のJSが言うことですこの場合はあなたがする必要があるすべてのものがトリガされ、実行されるのを待って、同じキューのようなものですので、一つのことと関連した操作の実装を達成することができますが、
一つのことがキューに存在する場合例種類は、多くのを取ります時間は、当時の使命は、待機状態になり、時にはブラウザがアニメーション現象が中断されること、例えば、
タスク1が行っているがありますが(長い時間を呼び出す)無限ループで、その後、他のフォローアップにつながるだろうタスクはの同期メカニズムでは、適切ので、JS設計上の欠陥を実行することはできません
非同期モード。
現在の非同期タスクが実行された後、すぐに実行されないように、非同期実行モードでは、各非同期タスクは、独自のまたは複数のコールバック関数とを持っている
キュー片で次のタスクを、そしてそれは、コールバック関数の実装ですが、また次のタスクは現在、コールバック関数を実行しているため、それが現在のプルバック適切な実行は判断できないので、待つことはありません
完了していれば、それがトリガされるような実装をリードします。
マルチスレッドは、(2)シングルスレッドブラウザカーネルJS
示されるようにブラウザカーネルは、マルチスレッドである:ケーリースケッチ
スレッドをトリガするために、JSエンジンスレッド、GUIのレンダリングスレッド、ブラウザのイベント:三件のブラウザの永久スレッド
ブラウザは、マルチスレッド実行環境で、ブラウザカーネル、JSエンジンのスレッドで最も重要なスレッドの1に割り当てられた複数のスレッド、非同期要求JSイベントキューいる間、
インタラクティブイベントは、ブラウザがイベントスレッドはタスクがタスクキューJSエンジンに追加されますトリガされたトリガ後にタイマーや他のイベントがブラウザスレッドモニター・イベントによってトリガされ、トリガ
場合は、JSエンジンのアイドル時間は、タスクを実行するために開始されます。
参照文献: