[英]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.