Javascript 如何将函数分配给全局变量?

Javascript 如何将函数分配给全局变量?,javascript,jquery,Javascript,Jquery,我试图将javascript函数的名称传递给全局变量。我有一个围绕$.ajax()构建的通用“CallMyWebService”函数。函数的url、谓词、contenttype等是基于全局变量的值设置的。在调用服务函数之前,会立即设置全局变量,而在全局变量重置为零之后 我的通用“CallMyWebService”函数如下: function CallMyWebService() { $.ajax( { url : varUrl,

我试图将javascript函数的名称传递给全局变量。我有一个围绕$.ajax()构建的通用“CallMyWebService”函数。函数的url、谓词、contenttype等是基于全局变量的值设置的。在调用服务函数之前,会立即设置全局变量,而在全局变量重置为零之后

我的通用“CallMyWebService”函数如下:

function CallMyWebService() { 

    $.ajax(
        {
        url         : varUrl,
        type        : varHttpVerb,
        cache       : varCacheBool,
        data        : varData, 
        contentType : varContentType,
        processdata : varProcessData, 
        dataType    : varDataType, 
        async       : varAsync,
        success     : varOnSuccess,
        error       : varOnError,
        complete    : varOnComplete
        }
    )

}
我遇到的问题是将函数名传递给
varOnSuccess
varOnError
varOnComplete
。如果我有一个名为
SuccessCallback()
的函数,并且我希望将服务调用的
结果
传递给
SuccessCallback()
,我如何将其分配给
varOnSuccess
全局变量?变量赋值将在另一个名为
SetupServiceCall()
的函数中进行。换句话说,在
SetupServiceCall()
函数中,应该如何完成
varOnSuccess=

varOnSuccess = SuccessCallback;
有关SuccessCallback()将接收的参数的详细信息,请参阅jQuery文档。

我想说:

varOnSuccess = SuccessCallback;

有关SuccessCallback()将接收的参数的详细信息,请参阅jQuery文档。

CallMyWebService应接受这些函数作为参数。您还应该通过引用而不是字符串名来传递它们

不要使用全局变量。如果您有任何类型的并行调用,这将失败

例如:

function CallMyWebService(successCallback, errorCallback) {
    $.ajax(
        ...
        success: successCallback,
        error: errorCallback
        ...
    );
}

//calling the service
function MySuccessHandler(data) {
    alert('success');
}

function MyErrorHandler(data) {
    alert('error');
}

CallMyWebService(MySuccessHandler, MyErrorHandler);

CallMyWebService应该接受这些函数作为参数。您还应该通过引用而不是字符串名来传递它们

不要使用全局变量。如果您有任何类型的并行调用,这将失败

例如:

function CallMyWebService(successCallback, errorCallback) {
    $.ajax(
        ...
        success: successCallback,
        error: errorCallback
        ...
    );
}

//calling the service
function MySuccessHandler(data) {
    alert('success');
}

function MyErrorHandler(data) {
    alert('error');
}

CallMyWebService(MySuccessHandler, MyErrorHandler);
你是说:

var varOnSuccess = null;
function SetupServiceCall() {
   varOnSuccess = SuccessCallback; //note 
}
你的意思是:

var varOnSuccess = null;
function SetupServiceCall() {
   varOnSuccess = SuccessCallback; //note 
}

您可以在ajax调用中简单地使用不带括号的函数名,例如:

$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
}); 

您可以在ajax调用中简单地使用不带括号的函数名,例如:

$.ajax({
...
success: SuccessCallback,
error: ErrorCallback,
...
}); 
应该有用

但是,我认为最好将变量部分作为参数传递给CallMyWebService,如下所示:

function CallMyWebService(varSuccess, varError) { 

    $.ajax({
        url         : varUrl,
        type        : varHttpVerb,
        cache       : varCacheBool,
        data        : varData, 
        contentType : varContentType,
        processdata : varProcessData, 
        dataType    : varDataType, 
        async       : varAsync,
        success     : varSuccess,
        error       : varError,
        complete    : varOnComplete
    });

}
应该有用

但是,我认为最好将变量部分作为参数传递给CallMyWebService,如下所示:

function CallMyWebService(varSuccess, varError) { 

    $.ajax({
        url         : varUrl,
        type        : varHttpVerb,
        cache       : varCacheBool,
        data        : varData, 
        contentType : varContentType,
        processdata : varProcessData, 
        dataType    : varDataType, 
        async       : varAsync,
        success     : varSuccess,
        error       : varError,
        complete    : varOnComplete
    });

}

你真的在所有变量名前面加上了
var
@ThiefMaster-是的,我们处于维护模式,所以我们尽可能少做。您真的在所有变量名前面加了
var
@ThiefMaster-是的,我们处于维护模式,所以我们所做的工作尽可能少。使用var关键字表示变量不是全局变量。@joidegn这不一定是真的。在函数外部声明的任何变量都是全局变量。使用var关键字表示变量不是全局变量。@joidegn这不一定是真的。在函数之外声明的任何变量都是全局变量。谢谢,这解决了当前的问题。虽然我觉得Jordan的解决方案(将vales传递到函数中)更可取,但有时你只需要使用绷带并继续移动。谢谢,这解决了眼前的问题。虽然我觉得乔丹的解决方案(将山谷传递到一个函数中)更可取,但有时你只需要使用绷带并继续移动。