2016-07-12 16 views
0

私はコールバック関数について調べていましたが、これまでのところコールバック関数は引数として別の関数に渡される関数です。コールバック機能のメリットは何ですか?

なぜコールバック関数を使用するのですか?コールバック機能の利点は何ですか?スタックオーバーフローやその他のウェブサイトでは、多くの回答がありますが、コールバックの本当の利点を理解するのに役立ったものはありませんでした。

+2

非同期操作。コールバックを使用する基本的な例については、['setTimeout'](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout)を参照してください。 –

+0

「約束の利点は何ですか?」 – ftor

答えて

0

JavaScriptには1つの実行スレッドがあります。

JavaScriptは実行中のスレッドよりも優先されません。

プログラムスタック内の他のものは、呼び出しスタックが空になるまで実行できません。これは「完了まで実行」と呼ばれます。

あなたのプログラムで実行されるものは、それ以外のもの(文字どおりすべて)をブロックします。

CPU以外のもの(ネットワーク要求など)にバインドされているものがあれば、実行スレッドが単に待機するだけでブロックされるため、CPUの面で非常に無駄です何か起こる。したがって、CPUはアイドル状態になります。

したがって、JavaScriptランタイムはこのシナリオを回避するためのメカニズムを提供します。それは待機(ネットワーク要求のような)によって特徴付けられる機能性を作ります非同期

これは、ランタイムがあなたを待っている間、実行のJavaScriptスレッドが続行できることを意味します。

これらの非同期関数にコールバックを指定して継続を指定することができます。非同期動作が完了したときから制御フローが拾い上げるべき場所である。

非同期操作が完了すると、ランタイムは「ランタイム」の内部の「ジョブキュー」に「ジョブ」を配置します。

これらのジョブは、関数ポインタ(コールバック)とコールバックの呼び出しで使用される引数をカプセル化します。

コールスタックが次に空であり、キュー内の他のジョブが完了すると、ジョブはジョブキューから削除され、スタックフレームがインスタンス化され(「実行コンテキスト」)、スタックに配置されます。

ランタイムはこのスタックフレームから実行を開始します。

時々、このような振る舞いは、より便利になるように約束のAPIに包まれていますが、その仕組みは同じです。

setTimeout(callback, 2000); 
 
document.write('Cool, I can do some stuff while the setTimeout is waiting.'); 
 

 
function callback() { 
 
    document.write('Hello from the callback.'); 
 
}

2

利点非同期機能に主に示しています。

  1. スクリプトコードの不要なチェックを防止します。 たとえば、ajaxを使用して応答を取得する: var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { // things you want to perform after request is done. }; xhttp.open("GET", url, true); xhttp.send();
    このように、要求がsetInterval(...)のように行われているかどうかを継続的に確認する必要はありません。DOMイベントの処理

  2. 。 DOMイベントのすべては、いつイベントがトリガーされるか予測できないため、コールバックで処理する必要があります。例えば

    object.onclick=function(){// things you want to perform after the object is clicked};

  3. 拡張可能APIまたはプラグインを作成します。たとえば: var yourApi = function(passInCallback){ var args; //do some common things... passInCallback(args); }

    は、その後、あなたのAPIユーザーは異なる振る舞いをした後、共通の機能を実行する実行することができます。

これまでのところ私は思いつきがあります。

関連する問題