31

コールバックについて質問し、別の質問にたどり着きました(コメントを参照)。クロージャはコールバックとどう違うのですか?

4

9 に答える 9

22

この中の紹介を確認してください:http://jibbering.com/faq/faq_notes/closures.html。クロージャが関数にどのように関連しているかをよりよく理解するのに役立ちます。

クロージャの例を次に示します。http ://www.javascriptkit.com/javatutors/closures2.shtml

基本的に、コールバックは関数ポインタのようなものです。それをクロージャにするビットは、その関数が、その外部の変数など、それが存在するコンテキスト上のすべてのものにアクセスするときです。その場合、関数は変数の現在の値を(コピーするのではなく)使用します。例4を参照してください。

于 2009-03-05T18:21:01.970 に答える
13

さまざまな定義:

コールバック-

コールバックは、他のコードに引数として渡される実行可能コードです。

閉鎖-

クロージャは、1つ以上の束縛変数を含む環境で評価される関数です。呼び出されると、関数はこれらの変数にアクセスできます。

于 2009-03-05T18:21:28.833 に答える
12

簡単に言えば、コンテキスト変数を使用するコールバックはクロージャです。

于 2017-02-05T14:55:57.063 に答える
5

ここにクロージャの良い定義があります:

「クロージャ」は、自由変数とそれらの変数をバインドする環境(式を「閉じる」)とともに自由変数を持つことができる式(通常は関数)です。

実際には、それはいくつかの隠れた変数を持つ関数であることを意味します。

コールバックは、より高いレベルのアイデアです。一般的には、後で呼び出されることを意図して渡される関数です。JavaScriptでは、クロージャはコールバックとしてよく使用されます。

于 2009-03-05T18:20:49.600 に答える
1

コンテキスト変数、つまりバインドされた変数 (== オブジェクトの状態) に依存するコールバックは、クロージャーになります。それ以外の場合は、自由変数 (== パラメーター) のみを取る場合は、純粋な関数になります。

于 2009-03-05T18:24:36.627 に答える
-1

2つがどのように関連しているのかさえわかりませんか?クロージャーは、ローカル状態の一部を何らかの関数に運びます。参照渡しと考えてください。

コールバックは、特定の変更について通知することを目的としており、プログラム フローをリダイレクトします。クロージャーはローカルの状態を変更する可能性がありますが、コールバックの場合のように、それを処理するためのプロセッサ時間が得られることはありません。

于 2009-03-05T18:23:21.997 に答える