簡體   English   中英

如何引用匿名JavaScript函數?

[英]How to reference an anonymous JavaScript function?

我正在嘗試使用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范圍內使用匿名函數, click()' so that the functions have access to the this event argument, but I don't want to 'declare' three functions for the PageMethods.MyFunction函數event argument, but I don't want to 'declare' three functions for the onTimeout , onError , and 'onAbort參數的三個函數。 如果我在點擊處理程序之外聲明了一個命名函數,則它不再有權訪問click()事件處理程序的'this'參數。

如果您的目標是使此功能不在全局范圍內,請使用模塊模式

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

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

我認為您可以在其前面放置一個帶有名稱的變量,如下所示:

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

我已經有一段時間了,但您可以嘗試一下。

您必須使用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 */

您可以在《 命名函數表達式解密 》一文中找到有關函數表達式和函數聲明的更多信息。

你不能 匿名函數的全部要點是它沒有名稱 ,因此不能被引用 (實際上,“匿名”基本上是希臘語中的“未命名”。)

如果要引用它,則需要給它起一個名字。

從匿名函數內部,您可以將其引用為arguments.callee (這是實現匿名遞歸的方式)。

如果我正確理解了您想做什么,那么您可以像這樣完成它:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM