2013-08-09 7 views
8

私はより良いスタイル/何かを行う正しい方法と考えられているのが好奇妙です。Javascript - 値を返すか、コールバック関数を使用する

JavaScriptで

、私は次のことを行うことができます:

function one() { 
    two(param, function(ans){ 
     // do more work 
    }); 
} 

function two(param, callback) { 
    var answer; 
    //do work 
    callback(answer); 
} 

が、私は単純に答えを返すことによって、同様の結果を持つことができます:

function one() { 
    var ans = two(param); 
    // do more work 
} 

function two(param, callback) { 
    var answer; 
    //do work 
    return answer; 
} 

私はあなたが必要な場合は、すべての「答えだと思い"おそらく、2番目のバージョンを使用し、パラメータとしてコールバック関数を渡すのではなく、その値を返す方が良いでしょう - 私の考えは正しいですか? 2つの相対的なパフォーマンスに関するアイデア?繰り返しますが、リターンバージョンはパフォーマンス面で優れていると思います。

答えて

8

一般的にコールバック関数は、コールしている関数が非ブロッキングのやり方で行われる非同期イベント(AJAX呼び出しの作成など)を実行するときに使用されます。

ノンブロッキングとは、一度その関数を呼び出すと、呼び出された関数が処理を完了する前にコードが次の文に続くことを意味します。したがって、非ブロック機能が完了した後に実行したいコードを置くコールバック関数。

answertwoから直接コールバックを実装する代わりに返すことをお勧めします。コールバックが多すぎると、Callback Pyramid

+0

私は一般的には興味がありましたが、それをもたらした状況は非同期イベントと関係しています。私はこれについて忘れてしまった - すばらしい説明をしてくれてありがとう。 –

+0

とは何ですか?どのソリューションが良いですか? – sarkiroka

+0

リンクが壊れています! – ANinJa

0

あなたは間違いなくリターンを使用する必要があります。コールバックは、関数やAjax呼び出しのような非同期イベントの完了後にカスタマイズされたコードを実行したいときに使用します。

+0

が機能します。関数が非同期でない場合は、呼び出し式の後に実行するコードを追加します。 –

+1

@SimonBoudriasあなたの投稿にコメントを表示します。 jQueryUIのようなライブラリで指定されたコールバックはどうですか? –

3

返品をご利用ください。

コールバックは、非同期アクションを実行する場合に適しています。そうしないと、無駄なオーバーヘッドになります。

+6

私は彼らがあなた自身のライブラリやプラグインを作成する場合など、非同期アクション以外での使用があると主張しますが、ユーザーが何らかのイベント後に実行したい関数を渡せるようにすると便利です。 –

+0

ええ、イベントは非同期です。私はこれがもっとはっきりしていると認めますが。 –

関連する問題