2016-05-12 13 views
0

Ich habe jedes Beispiel gesehen, wie anonyme Funktionen mit named zu ersetzen. Ich suche, wie eine benannte Funktion in eine anonyme geändert werden kann. Ich möchte nur meinen Code etwas optimieren. Ich verstehe, wie die anonyme Funktion funktioniert, ich kann die Syntax in diesem Beispiel einfach nicht richtig finden. Darüber hinaus ist die DoWork-Funktion ein großes Tier. Ich brauche es, um genannt zu werden.Ersetzen Sie benannte Funktion durch anonyme in Javascript

HINWEIS: Ich habe Google, und ich suche entweder die falschen Begriffe, oder nicht viele Leute wollen wissen, wie das geht. Ich flehe demütig um SOs Verzeihung, dass ich diese Antwort nirgendwo anders gefunden habe.

HINWEIS2: Bitte ignorieren Sie meine Verwendung der Schließung mit this.formFields. Nimm an, dass es sich niemals ändern wird. Ich setze es zu einem früheren Zeitpunkt.

Mein Code:

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

einfach es inline schreiben wie erwähnt. Wo Sie einen Funktionsnamen angeben können, können Sie eine Funktionsdefinition erwähnen, es funktioniert genauso. Nicht sicher, ob es Vorteile gibt, denke ich, das hängt davon ab. – Nishant

Antwort

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

Obwohl Ihre Antwort der Antwort von ihimv sehr ähnlich ist, warum fügen Sie eine zusätzliche Klammer hinzu, nachdem Sie das anonymisiert haben, und er tut es nicht. Ist das nur strenger? – CarComp

+1

Auf diese Weise habe ich zwei Dinge mit einer einzigen Codezeile gemacht: 1. Definierte eine Funktion 'function (formField) {...}' 2. sofort mit dem Argumentwert 'this.formFields' aufgerufen. Und ich nannte es mit einem Argument, das in den Umfang dieser Funktion kopiert wurde, und da habe ich keine Angst, wenn etwas den Wert von 'this.formFields' ändert. –

+0

ausgezeichnete Erklärung – CarComp

Verwandte Themen