2016-05-12 8 views
0

名前付き関数を名前付き関数に置き換える方法のすべての例を見てきました。名前付き関数を匿名のものに変更する方法を探しています。私はわずかに自分のコードを最適化するために探しています。私は匿名関数の仕組みを理解していますが、この例では構文を正しく取得できません。 さらに、doWork関数は大きな獣です。私はそれを命名する必要があります。名前付き関数をjavascriptで匿名で置き換える

注:私はGoogleを使い、誤った用語を検索しているか、多くの人がこれを行う方法を知りたいとは思わない。私はこの答えをどこか別のところで見つけられなかったことのために、SOの許しを謙虚に請う。

注2:this.formFieldsで私の閉鎖の使用を無視してください。ただそれが変わらないと仮定してください。私は早い時期にそれを設定しています。

マイコード:

function doWork(serviceResponse, theFormFields){ 
    // Process stuff like jQuery or console test stuff etc 
} 

// THIS NAMED FUNCTION IS WHAT I WANT TO BE ANONYMOUS 
function createCallback(formfields) { 
    return function(data) { 
     // This reference to the 'formfields' parameter creates a closure on it. 
     doWork(data, formfields); 

    }; 
} 

// THE ABOVE FUNCTION *COULD* be anonymously declared in the getJSON 
$.getJSON(jsonService + callString, createCallback(this.formFields)); 
+0

述べたようにジャストインラインそれを書きます。関数名を記述することができるところでは、関数定義について言及することもできますが、同じことができます。利点があると思っているかどうかわからない、私はそれが依存すると思います。 – Nishant

答えて

2
$.getJSON(
    jsonService + callString,   // your param #1 
    (function (formField) {    // here we create and execute anon function 
             // to put this.formFields into the scope as formField variable 
             // and then return required callback 
     return function (data) { 
      doWork(data, formField); 
     } 
    })(this.formFields) 
); 
+0

あなたの答えはihimvの答えと非常に似ていますが、匿名を宣言した後はなぜかっこを追加しますか?これはちょっと厳しいですか? – CarComp

+1

このようにして、1行のコードで2つのことを行いました。1.関数 'function(formField){...}'を定義しました。2.すぐに引数値 'this.formFields'を呼び出しました。そして、私はその関数のスコープにコピーされた議論でそれを呼びました。それ以来、何かが 'this.formFields'の値を変更するかどうかは気にしません。 –

+0

優秀な説明 – CarComp

関連する問題