2012-01-07 10 views
1

私はajax_generic ansが3つの関数を送信するオブジェクトajax_tryitを持っています。彼らはすべて名前がついています。匿名関数を使用する場合

匿名関数を使用する方がより良い(より効率的で、速く)でしょうか。

アプリケーション...これは、3つのことを行うことができます、合格、失敗、または未定義(通常はPHPエラー)を行うことができますajaxコールバック関数です。あなたがスタックトレースに自分の名前を見ることができるので

function ajax_generic(server_response_text, pass_func, fail_func, undefined_func) 
{ 
    var aml_status = check_aml(server_response_text.slice(0, 6)); 
    if(aml_status === Constant.AML.PASS) 
    { 
     pass_func(); 
    } 
    else if(aml_status === Constant.AML.FAIL) 
    { 
     fail_func(); 
    } 
    else 
    { 
     undefined_func(); 
    } 
} 
function ajax_tryit(server_response_text, html_div) 
{ 
    var pass_func = function {window.location.reload()}; 
    var fail_func = function(server_response_text) { alert('ajax_tryit(): ' + server_response_text) } ; 
    var undefined_func = function(server_response_text) { alert('php error: ' + server_response_text) }; 
    ajax_generic(pass_func, fail_func, undefined_func); 
} 
+0

*匿名関数を使用する方がよいでしょうか。それを拡張するのに役立つかもしれません。 –

+0

3変数を保存します。より効率的です。 –

答えて

6

名前の関数は(つまり、関数宣言文で作成した関数)は実際にはかなりいいです。それ以外に、関数が適切なスコープで宣言されている限り(またはスコープが関係ない場合)、それほど重要ではありません。

関数定義式で関数に名前を付けるのは技術的には合法ですが、さまざまなJavaScriptエンジンcan't be trusted not to do something weirdがあります。

4

いつもより明確になっているので、答えはで、と答えています。今、あなたはかなりわかりやすい名前を持っています。それらを取り出すことは、コードを保守しにくくし、インデントを混乱させることになります。彼らは名前を持つことによって何の問題も生じません。あなたが変更される可能性が

一つのことは、しかし、インデントと構文は次のとおりです。

function ajax_tryit(server_response_text, html_div) { 
    function pass_func() { 
     window.location.reload() 
    } 

    function fail_func(server_response_text) { 
     alert('ajax_tryit(): ' + server_response_text) 
    } 

    function undefined_func(server_response_text) { 
     alert('php error: ' + server_response_text) 
    } 

    ajax_generic(pass_func, fail_func, undefined_func); 
} 

EDIT:あなたのコメントへの返信でも、:3つの変数保存

。より効率的なものです。

いいえ、ここでは特に変数を使用しない方が効率的ではありません。それを心配しないでください。あなたは(コールバック関数に引数を渡す)コールバック関数に変数を渡すか、スコープに

例を変更する必要がある場合

1

アノン機能を使用するのは良いです:

var somevar = "test"; 

setInterval(function() 
{ 
    test(somevar); 
},5000); 

function test(Msg) 
{ 
    alert(Msg); 
} 

あなただけ

を行っていた場合
setInterval(test,5000); 

非常に単純な例で、空白のアラートボックスが表示されているはずです。

changing scopeここでの回答は、スコープを変更する必要がある場合の例を示しています。

それ以外の場合は、実際には、名前の付いた関数をanonのものに切り替える必要はありません。

関連する問題