如何引用匿名JavaScript函数?

时间:2010-04-14 21:20:28

标签: asp.net javascript jquery

我正在尝试使用jQuery“附加”事件函数来调用Page方法,其中我喜欢使用闭包来保持事件目标本地,如下所示,但是页面方法调用声明了几个“错误”函数,我想为他们所有人使用一个功能。如果,在下面的代码中,我处理错误而不是成功,我怎么能使用我的单个匿名处理程序来处理所有3个错误函数?

        $(":button").click(function () {
            var button = this;
            PageMethods.DoIt(
                function (a, b, c) {
                    alert(button);
                });
        });

此示例传递成功回调的匿名函数。只有其中一个。如果我传递错误回调,我怎么能对所有3个错误回调使用'function(e,c,t)'?

补充:我想在这里做的是每当用户点击一个切换按钮(复选框)时触发一个AJAX调用,但为了提高响应速度,我想立即切换按钮状态,并且只有“解开”它,如果AJAX调用失败。

现在,在我的客户端click()事件处理程序中,我想在click()' so that the functions have access to the这个event argument, but I don't want to 'declare' three functions for the onTimeout , onError {{1}的范围内使用匿名函数PageMethods.MyFunction函数的参数。如果我在click处理程序之外声明一个命名函数,它就不再能访问, and 'onAbort事件处理程序的'this'参数。

6 个答案:

答案 0 :(得分:3)

如果您的目标是使此功能不在全球范围内,请使用the module pattern

(function() {
  function asplode() {
    alert('Your head asplode.');
  }

  $('body').click(asplode);
})();

答案 1 :(得分:2)

我认为您可以在其前面放置一个名称变量,如下所示:

var myFunction = function(a, b, c) { ...

我已经有一段时间没有这样做,但你可以尝试一下。

答案 2 :(得分:1)

您必须使用var为变量分配匿名函数(始终使用var,否则变量会获取全局范围,这可能会导致意外结果(例如,从不全局声明变量i)。这是引用它的唯一方法:

var myFunction = function (a, b, c) {
    /* tum de dum */
};  // don't forget this semicolon

然后你可以在不同的地方使用这个功能:

$(":button").click(myFunction);
/* don't put braces after the function name when referencing it,
   else it will be called immediately */

您可以在文章Named function expressions demystified中找到有关函数表达式和函数声明的更多信息。

答案 3 :(得分:0)

你做不到。 匿名函数的整点 no name ,因此无法引用 。 (事实上​​,“匿名”基本上是希腊语中的“未命名”。)

如果你想引用它,你需要给它一个名字。

答案 4 :(得分:0)

从匿名函数内部,您可以将其引用为arguments.callee(这是实现匿名递归的方式)。

答案 5 :(得分:0)

如果我理解你想做什么,你可以这样做:

    function handler(a, b, c) {
        alert(this); // button
    }

    $(":button").click(function () {
        var button = this;
        PageMethods.DoIt(function () {
            handler.call(button, a, b, c);
        });
    });