关于功能签名的问题

时间:2011-07-31 21:07:57

标签: javascript

我在网上发现了一个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功能,你可以调用函数与一些其他数量的参数比函数中声明的?或者这段代码应该如何工作?

3 个答案:

答案 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>