用命名函数替换匿名函数(在jQuery中)

时间:2013-09-12 09:48:31

标签: javascript jquery parameters anonymous-function

我的原始(工作)代码如下:

jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(function () {
        $(this).html("");
    });
    $('[id="errorMessages"]').ajaxError(function (e, jqxhr, settings, exception) {
        //...
    });
});

当我试图将匿名函数替换为命名函数时,调用如下:(我正在为某些需求做POC,期望这样的实现。)

function fs() {
        $(this).html("");
}
function fe(e, jqxhr, settings, exception) {
        //...
}
jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(fs());
    $('[id="errorMessages"]').ajaxError(fe(e, jqxhr, settings, exception));
});

我收到一条错误,指出参数'e'未定义。但没有参数的函数似乎工作正常。

我想知道匿名函数如何接收参数,而调用外部函数时则不可用。

有没有办法将这些参数化的匿名函数转换为常规函数调用。

1 个答案:

答案 0 :(得分:6)

您正在将功能错误地分配给处理程序,请尝试以下操作:

jQuery().ready(function ($) {
    $('[id="errorMessages"]').ajaxStart(fs);
    $('[id="errorMessages"]').ajaxError(fe);
});

请注意,传递没有括号的函数名称意味着您将提供该事件发生时应该使用的函数的引用。

当前代码将在附加事件时调用该函数(因此您获得'e' is undefined的原因)并将函数的结果分配给事件处理程序。