首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果调用一个参数比定义的函数接受的参数更多的函数,会发生什么?

如果调用一个参数比定义的函数接受的参数更多的函数,会发生什么?
EN

Stack Overflow用户
提问于 2012-10-02 16:05:10
回答 5查看 18K关注 0票数 28

我想知道所有家庭中的常规JS开发人员定义的函数,以及预定义的DOM方法:如果我试图用WHATWG的attachEvent签名调用IE的addEventListener,会发生什么?例如:

代码语言:javascript
运行
复制
elem.attachEvent('onbillgates\'mom', function(e){ this.mount(); }, false);

具体来说,请注意第三个参数false。即使attachEvent方法的签名只需要两个参数,这个问题还会发生吗?

这个例子呢?

代码语言:javascript
运行
复制
function foo(FirstOf2, SecondOf2) {
  console.log(FirstOf2 + SecondOf2);
}

foo(1, 2, true);
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-02 16:12:15

JavaScript没有固定参数列表的概念。对于您自己的函数,您总是可以指定任意数量的参数,并输入您想输入的任意数量的参数。

对于与本机代码相关的内置函数,它取决于.

你问这取决于什么:

让我们来看看ECMA-262

第15节一般涉及内置(不与主机混淆)功能。

除非在某一特定函数的描述中另有规定,否则,如果本条款中所描述的函数或构造函数的参数比指定的函数所需的参数少,则该函数或构造函数的行为应完全如同它已被给予足够的附加参数一样,每个此类参数都是未定义的值。

好的。如果我传递的参数比需要的少,则取决于函数本身的规范(向下滚动第15节以找到每个内置函数的规范)。

除非在特定函数的描述中另有规定,否则,如果在此子句中描述的函数或构造函数被赋予的参数比指定的函数允许的参数多,则额外的参数将由调用计算,然后由函数忽略。但是,一个实现可以定义与这些参数相关的实现特定行为,只要该行为不是仅仅以存在额外参数为前提的抛出TypeError异常。

传递太多的参数不应该引发TypeError。不过,这可能会引发其他错误。同样,这取决于您所谈论的函数。

,您是在明确地谈论DOM,而不是内建函数。老实说,我找不到规范的相应部分。ECMA规范比w3网站更容易阅读.

票数 26
EN

Stack Overflow用户

发布于 2012-10-02 16:23:03

不会疼的。您甚至可以使用比所需的参数更少的参数来调用函数,只要函数代码可以使用一些未定义的值。

票数 7
EN

Stack Overflow用户

发布于 2019-07-24 09:39:16

我遇到了这个重要的问题,无论多么古老;我希望与它分享我的实验对子孙后代有益:

  1. 可以使用arguments对象来访问函数的参数,而不管函数签名中参数的数量。 值得一提的是,这不适用于箭头函数:

代码语言:javascript
运行
复制
function singleArg(x) {
  console.log(arguments);
}

singleArg(1, 2); // Called with 2 arguments
singleArg();     // Called with 0 arguments

// Results in an error, as 'arguments' isn't defined for arrow functions
((arg) => console.log(arguments))(1);

  1. 文档中有这样的说法:arguments并不完全是Array

“类似于数组”意味着参数有一个长度属性和从零索引的属性,但是它没有数组的内置方法,比如forEach()和map()。

因此,以下代码将导致错误:

代码语言:javascript
运行
复制
(function singleArg(x) {
  console.log(arguments); // This line works
  arguments.forEach(x => console.log(x)); // This causes an error
})(1, 2);

  1. 在调用一个参数少于其签名的函数时,将为它们分配undefined

代码语言:javascript
运行
复制
(function twoArgs(a, b) {
  console.log(`a: ${a}\nb: ${b}`);
})(1);

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12694031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档