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