CarComp
CarComp

Reputation: 2018

Replace named function with anonymous in javascript

I've seen EVERY example of how to replace anonymous functions with named ones. I'm looking for how a named function can be changed to an anonymous one. I'm looking to just optimize my code slightly. I understand how the anonymous function works, I just can't get the syntax right in this example. Additionally, the doWork function is a big beast. I need it to stay named.

NOTE: I did google, and I'm either searching the wrong terms, or not a lot of people want to know how to do this. I humbly beg for SO's forgiveness of my failure to find this answer somewhere else.

NOTE2: Please ignore my use of closure with this.formFields. Just assume it won't change ever. I'm setting it at an earlier time.

My 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));

Upvotes: 0

Views: 152

Answers (1)

stas.yaranov
stas.yaranov

Reputation: 1797

$.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)
);

Upvotes: 2

Related Questions