我在网上发现了一个javascript示例让我有些困惑。我对javascript很新,但对“传统”语言有很好的了解。当我尝试google时,我无法找到答案,所以我会在这里提出问题并希望有人可以帮助我。
从一个“类”执行以下代码:
this.foo.addListener("xType", this, this.boo);
调用的函数如下所示:
//first argument (type:String) what kind of event
//second argument (type:Function) listener - listening function
addListener: function(kindOf, listener) {
我不明白的是,参数的数量不匹配。当函数被调用时,使用3个参数即“xType”,这和this.boo但在函数签名中只有2个参数,即kindOf和listener。这是一些javascript功能,你可以调用函数与一些其他数量的参数比函数中声明的?或者这段代码应该如何工作?
答案 0 :(得分:23)
这是一些javascript功能,您可以使用其他一些参数调用函数而不是函数中声明的函数吗?
这是对的。 JavaScript不要求您使用与用于定义它的参数数量相同的函数调用函数。
如果您拨打的电话太少,则缺失值将为the special value undefined
。如果你打电话太多,该函数将需要使用the special array value arguments
来获取它们。例如,
function alertMany() {
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}
}
alertMany("hello", "goodbye");
alertMany("hello", "hello again", "hello once more", "farewell");
alertMany()
所有这些调用都会起作用,每个参数都会显示一个警告框。
答案 1 :(得分:0)
在javascript中,您可以在飞行中构建函数。
该行:
addListener: function(kindOf, listener) {
正在为对象的参数添加一个函数。您应该找到一个代码,将其转换为具有3个参数的函数.Eg:循环遍历对象并基于此动态创建函数的循环。这对于几个框架(尤其是jquery)来说非常常见。
或者,您正在查看错误的定义,实际代码在其他地方。
答案 2 :(得分:-1)
在ES6中,您现在可以使用rest参数将任意数量的参数传递给函数签名:
const addUs = (x, y, ...z) => <your function here>