![](/img/trans.png)
[英]what is the difference between calling function in JavaScript with or without parentheses ()
[英]What's the difference between calling a javascript function with arguments, and without
我試圖從ajax調用中獲取數據,並且正在使用代碼
jQuery.ajax({
type: 'POST',
url: '/chatlog',
success: exoticlangAjaxCompleted,
data:'messageLog=' + privateMessageLogJson,
dataType: 'json'
});
數據位於JSON數組中(鍵=“ messageLog”)
為何通話有效
success: exoticlangAjaxCompleted,
但不是
success: exoticlangAjaxCompleted(),
要么
success: exoticlangAjaxCompleted(messageLog) ??
JS函數是:
function exoticlangAjaxCompleted(messageLog){
console.log('exoticlangAjaxCompleted!');
console.log('chat log is: ' + messageLog);
console.log('chat log is: ' + dump(messageLog));
}
success
參數需要對AJAX請求完成時將調用的函數的引用。
具有以下內容:
success: exoticlangAjaxCompleted,
您正在根據需要傳遞對函數的引用。
而在這種情況下:
success: exoticlangAjaxCompleted(),
您正在調用exoticlangAjaxCompleted
函數,並將結果傳遞給success
參數。 除非您的函數返回一個函數,否則它將不起作用!
前一種語法起作用的原因是, success
需要一個函數對象(如果需要,可以使用參數調用它),而僅調用函數不會返回函數對象。 當您使用function()
形式調用一個函數時,它會產生一個輸出 (即使該輸出未定義),這也是這種形式起作用的原因:
...
success: function() {
// Some callback code
}
...
那么,它們有何不同? 為了展示如何,讓我們看一下WebKit控制台:
如您所見,執行myFunc
返回函數本身 ,而myFunc()
返回**一個將無法select:
的對象select:
*
我的理解是您不能以這種方式傳遞參數。
如果嘗試這樣做:
success: function(){exoticlangAjaxCompleted(messageLog);},
那可能行得通。
在Jquery文檔中,這是有關成功回調的部分:
“如果請求成功,將調用一個函數。該函數將傳遞三個參數:從服務器返回的數據,根據dataType參數格式化;描述狀態的字符串;以及jqXHR(在jQuery 1.4.x中,XMLHttpRequest)賓語。”
因此,您必須制作一個技巧,例如: 附加參數的模式
success: function(..){
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.