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