web-dev-qa-db-ja.com

閉鎖とコールバックとは何ですか?

JavaScriptのクロージャとコールバックとは何ですか?私はまだどちらかの良い説明を見つけていません。

20
user154759

ClosuresはStackoverflowですでに適切に処理されており、ここでは単なる選択です:-

JavaScriptクロージャはどのように機能しますか?
JavaScriptで「クロージャ」とは正確には何を指しますか?
これはJavascriptクロージャの正しい例だと言えますか..クロージャを回避することを検討する必要がある場所は??
JavaScriptのスコープとクロージャ
Javascriptクロージャと「this」コンテキスト
JavaScript-「クロージャー」の使用法について学ぶにはどうすればよいですか?

コールバックはより単純な概念です。コールバックは基本的に、関数が別の関数をパラメーターとして受け入れる場所です。実行中のある時点で、呼び出された関数はパラメーターとして渡された関数を実行します。これはコールバックです。多くの場合、コールバックは実際には非同期イベントとして発生します。その場合、呼び出された関数はコールバックを実行せずに戻る可能性があり、それは後で発生する可能性があります。一般的な(ブラウザベースの)例を次に示します。-

 function fn() { alert("Hello, World"); }
 window.setTimeout(fn, 5000);

ここで、関数fnコールバックとしてsetTimeout関数に渡されます。 Set timeoutはすぐに戻りますが、5秒後にcallbackとして渡された関数が実行されます。

クロージャとコールバック

クロージャが(偶然、偶然、または故意に)作成される理由は、コールバックを作成する必要があるためです。例えば:-

 function AlertThisLater(message, timeout)
 {
     function fn() { alert(message); }
     window.setTimeout(fn, timeout);
 }

 AlertThisLater("Hello, World!", 5000);

(閉鎖を把握するためにリンクされた投稿のいくつかを読んでください)

messageパラメータを部分的に含むクロージャが作成され、fnの呼び出しが戻ってからかなりの時間が経過した後、AlertThisLaterが実行されますが、fnはまだアクセスできますmessageの元のコンテンツに。

37
AnthonyWJones