在javascript中将命名函数替换为匿名函数

在javascript中将命名函数替换为匿名函数,javascript,anonymous-function,Javascript,Anonymous Function,我已经看到了如何用命名函数替换匿名函数的每个示例。我正在寻找如何将命名函数更改为匿名函数。我只是想稍微优化一下我的代码。我理解匿名函数是如何工作的,只是在这个例子中我无法正确理解语法。 此外,doWork函数是一个大麻烦。我需要它的名字 注意:我在谷歌上搜索过,我不是在搜索错误的术语,就是很多人都不想知道怎么做。我谦卑地请求SO原谅我在其他地方没有找到这个答案 注2:请忽略我对this.formFields的闭包用法。假设它永远不会改变。我在早些时候设置 我的代码: function doWor

我已经看到了如何用命名函数替换匿名函数的每个示例。我正在寻找如何将命名函数更改为匿名函数。我只是想稍微优化一下我的代码。我理解匿名函数是如何工作的,只是在这个例子中我无法正确理解语法。 此外,doWork函数是一个大麻烦。我需要它的名字

注意:我在谷歌上搜索过,我不是在搜索错误的术语,就是很多人都不想知道怎么做。我谦卑地请求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));

只需像前面提到的那样内联编写。当你提到一个函数名的时候,你可以提到一个函数定义,它的作用是一样的。不确定是否有好处,我想这要看情况了。只需像前面提到的那样内联编写。当你提到一个函数名的时候,你可以提到一个函数定义,它的作用是一样的。虽然你的答案与ihimv的答案非常相似,但为什么你在声明匿名后再加上一个括号,而他却没有。这更严格吗?这样我就用一行代码做了两件事:1。定义了一个函数
函数(formField){…}
2。使用参数值this.formFields立即调用。我用一个复制到该函数范围内的参数调用它,因此我不担心会有什么东西改变
this.formFields
的值。好的,这个答案和我的答案都是错误的。所以我删除了我的回答,你能详细说明一下吗?代码似乎有效。怎么了?另外,我选择这个答案是因为斯塔斯·亚拉诺夫不辞辛劳地解释了为什么一切都是这样。我想了解更多。虽然你的答案与ihimv的答案非常相似,但为什么你在声明匿名后再加上一个括号,而他却没有。这更严格吗?这样我就用一行代码做了两件事:1。定义了一个函数
函数(formField){…}
2。使用参数值this.formFields立即调用。我用一个复制到该函数范围内的参数调用它,因此我不担心会有什么东西改变
this.formFields
的值。好的,这个答案和我的答案都是错误的。所以我删除了我的回答,你能详细说明一下吗?代码似乎有效。怎么了?另外,我选择这个答案是因为斯塔斯·亚拉诺夫不辞辛劳地解释了为什么一切都是这样。我正在努力学习更多。
$.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)
);