Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于函数签名的几个问题_Javascript - Fatal编程技术网

Javascript 关于函数签名的几个问题

Javascript 关于函数签名的几个问题,javascript,Javascript,我在网上发现了一个javascript示例,这让我有点困惑。我对javascript非常陌生,但对“传统”语言有很好的了解。我在谷歌搜索时找不到答案,所以我会在这里问这个问题,希望有人能帮我 从一个“类”执行以下代码: this.foo.addListener("xType", this, this.boo); 调用的函数如下所示: //first argument (type:String) what kind of event //second argument (type:Functio

我在网上发现了一个javascript示例,这让我有点困惑。我对javascript非常陌生,但对“传统”语言有很好的了解。我在谷歌搜索时找不到答案,所以我会在这里问这个问题,希望有人能帮我

从一个“类”执行以下代码:

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和this.boo,但在函数签名中只有2个参数,即kindOf和listener。这是一种javascript功能,您可以使用函数中声明的参数以外的其他参数来调用函数吗?或者这个代码应该如何工作

这是一种javascript功能,您可以使用函数中声明的参数以外的其他参数来调用函数吗

这是正确的。JavaScript不要求您使用定义函数时使用的参数数调用函数

如果调用的值太少,则缺少的值将丢失。如果使用太多的函数调用它,则需要使用函数来获取它们。比如说,

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()
函数alertMany(){
for(var i=0;i

所有这些调用都可以工作,为每个参数显示一个警报框。

在javascript中,您可以动态构建函数

该行:

addListener: function(kindOf, listener) {
正在向对象添加带有to参数的函数。你应该找到一段代码,将其转换成一个具有3个参数的函数。例如:一个循环,它遍历对象并基于此动态创建函数。这在一些框架(尤其是jquery)中非常常见


或者,您正在查看错误的定义,实际代码在别处。

在ES6中,您现在可以使用rest参数将任意数量的参数传递给函数签名:


const addUs=(x,y,…z)=>

有一个叫做“arguments”的神奇变量,即使指定的变量不止一个。感谢您的输入!这个例子使用的是框架原型(如果它有一些特殊的功能)。我很确定我看到的是正确的定义。在该函数中添加跟踪消息(打印参数),然后重新运行代码;)出于好奇,你为什么要在
for
结构之外声明
i
?@Zirak:C89的防御习惯。我会换的。