簡體   English   中英

調用帶參數的javascript函數和不帶參數的javascript函數有什么區別

[英]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控制台:

該圖顯示了WebKit控制台,myFunc與myFunc()

如您所見,執行myFunc返回函數本身 ,而myFunc()返回**一個將無法select:的對象select: *

我的理解是您不能以這種方式傳遞參數。

如果嘗試這樣做:

success: function(){exoticlangAjaxCompleted(messageLog);},

那可能行得通。

在Jquery文檔中,這是有關成功回調的部分:

“如果請求成功,將調用一個函數。該函數將傳遞三個參數:從服務器返回的數據,根據dataType參數格式化;描述狀態的字符串;以及jqXHR(在jQuery 1.4.x中,XMLHttpRequest)賓語。”

jQuery.ajax()

因此,您必須制作一個技巧,例如: 附加參數的模式

success: function(..){
...
}

暫無
暫無

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

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