コールバックについて質問し、別の質問にたどり着きました(コメントを参照)。クロージャはコールバックとどう違うのですか?
9 に答える
この中の紹介を確認してください:http://jibbering.com/faq/faq_notes/closures.html。クロージャが関数にどのように関連しているかをよりよく理解するのに役立ちます。
クロージャの例を次に示します。http ://www.javascriptkit.com/javatutors/closures2.shtml
基本的に、コールバックは関数ポインタのようなものです。それをクロージャにするビットは、その関数が、その外部の変数など、それが存在するコンテキスト上のすべてのものにアクセスするときです。その場合、関数は変数の現在の値を(コピーするのではなく)使用します。例4を参照してください。
簡単に言えば、コンテキスト変数を使用するコールバックはクロージャです。
ここにクロージャの良い定義があります:
「クロージャ」は、自由変数とそれらの変数をバインドする環境(式を「閉じる」)とともに自由変数を持つことができる式(通常は関数)です。
実際には、それはいくつかの隠れた変数を持つ関数であることを意味します。
コールバックは、より高いレベルのアイデアです。一般的には、後で呼び出されることを意図して渡される関数です。JavaScriptでは、クロージャはコールバックとしてよく使用されます。
コンテキスト変数、つまりバインドされた変数 (== オブジェクトの状態) に依存するコールバックは、クロージャーになります。それ以外の場合は、自由変数 (== パラメーター) のみを取る場合は、純粋な関数になります。
2つがどのように関連しているのかさえわかりませんか?クロージャーは、ローカル状態の一部を何らかの関数に運びます。参照渡しと考えてください。
コールバックは、特定の変更について通知することを目的としており、プログラム フローをリダイレクトします。クロージャーはローカルの状態を変更する可能性がありますが、コールバックの場合のように、それを処理するためのプロセッサ時間が得られることはありません。