关于功能签名的问题

Kne*_*ta_ 12 javascript

我在网上发现了一个javascript示例让我有点困惑.我对javascript很新,但对"传统"语言有很好的了解.当我尝试google时,我无法找到答案,所以我会在这里提出问题并希望有人可以帮助我.

从一个"类"执行以下代码:

this.foo.addListener("xType", this, this.boo);
Run Code Online (Sandbox Code Playgroud)

调用的函数如下所示:

//first argument (type:String) what kind of event
//second argument (type:Function) listener - listening function
addListener: function(kindOf, listener) {
Run Code Online (Sandbox Code Playgroud)

我不明白的是,参数的数量不匹配.当函数被调用时,使用3个参数即"xType",这和this.boo但在函数签名中只有2个参数,即kindOf和listener.这是一些javascript功能,你可以调用函数与一些其他数量的参数比函数中声明的?或者这段代码应该如何工作?

小智 23

这是一些javascript功能,你可以调用函数与一些其他数量的参数比函数中声明的?

这是对的.JavaScript不要求您调用具有与用于定义它的参数数量相同的参数的函数.

如果用太少的方法调用它,则缺少的值将具有特殊值undefined.如果你用太多的方法调用它,该函数将需要使用特殊的数组值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()
Run Code Online (Sandbox Code Playgroud)

所有这些调用都会起作用,为每个参数显示一个警告框.