簡體   English   中英

為什么用JavaScript中的arguments [arguments.length-1]表示回調函數?

[英]Why are Callback functions represented by arguments[arguments.length-1] in javascript?

我已經從somehwere復制了一段代碼,該代碼基本上用於擴展JQuery的hide方法並擴展為調用回調

但尚不清楚該方法如何工作..

       js.executeScript("window.webdrivercallback = function(){};" +

            "var _oldhide = $.fn.hide;" +
            "$.fn.hide = function(speed, callback) {" +
            "    var retThis = _oldhide.apply(this,arguments);" +
            "    window.webdrivercallback.apply();" +
            "    return retThis;" +
            "};"
    );

另外,在Selenium Webdriver代碼中,我們必須添加一段代碼,例如:

js.executeAsyncScript("window.webdrivercallback = arguments[arguments.length - 1];");

我無法理解如何僅通過傳遞諸如arguments[arguments.length-1]類的arguments[arguments.length-1]來創建javascript函數webdrivercallback。此語句的意義是什么? 什么是arguments ,值是從哪里傳遞到arguments字段的,因為我找不到從哪里將值傳遞到參數字段的單個地方。 有人可以幫助我理解這段代碼。

在這種情況下,最后一個參數是一個函數, arguments是一個數組(很好,非常類似於數組),其中包含發送給該函數的所有參數。 因此, arguments[arguments.length-1]將始終是發送給函數的最后一個參數。

例如,假設您有:

function someFunction(param1, param2, param3){
    //arguments would have here: [param1, param2, param3]
    //so arguments[arguments.length-1] is the last param: param3
    var callback = arguments[arguments.length-1];   //This is what looks strange to you
    alert(typeof callback); //alerts 'function' if last param is well.. a function;
    callback();  //Execute the callback as a proof!   
}

因此,我們稱之為:

someFunction('a', 'b', function(){
    alert("callback executed!!");
});

如您所見,它會警告“功能”,因為最后一個參數是功能。 因此,可以毫無問題地將其分配為回調。

另外,不要忘記我們可以使用一個比定義的參數多或少的參數來調用函數,因此arguments[arguments.length-1]是始終獲取最后一個的技巧。

希望清楚。

來自玻利維亞拉巴斯的歡呼聲

暫無
暫無

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

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