我想知道所有家庭中的常规JS开发人员定义的函数,以及预定义的DOM方法:如果我试图用WHATWG的attachEvent签名调用IE的addEventListener,会发生什么?例如:
elem.attachEvent('onbillgates\'mom', function(e){ this.mount(); }, false);具体来说,请注意第三个参数false。即使attachEvent方法的签名只需要两个参数,这个问题还会发生吗?
这个例子呢?
function foo(FirstOf2, SecondOf2) {
console.log(FirstOf2 + SecondOf2);
}
foo(1, 2, true);发布于 2012-10-02 16:12:15
JavaScript没有固定参数列表的概念。对于您自己的函数,您总是可以指定任意数量的参数,并输入您想输入的任意数量的参数。
对于与本机代码相关的内置函数,它取决于.
你问这取决于什么:
让我们来看看ECMA-262
第15节一般涉及内置(不与主机混淆)功能。
除非在某一特定函数的描述中另有规定,否则,如果本条款中所描述的函数或构造函数的参数比指定的函数所需的参数少,则该函数或构造函数的行为应完全如同它已被给予足够的附加参数一样,每个此类参数都是未定义的值。
好的。如果我传递的参数比需要的少,则取决于函数本身的规范(向下滚动第15节以找到每个内置函数的规范)。
除非在特定函数的描述中另有规定,否则,如果在此子句中描述的函数或构造函数被赋予的参数比指定的函数允许的参数多,则额外的参数将由调用计算,然后由函数忽略。但是,一个实现可以定义与这些参数相关的实现特定行为,只要该行为不是仅仅以存在额外参数为前提的抛出TypeError异常。
传递太多的参数不应该引发TypeError。不过,这可能会引发其他错误。同样,这取决于您所谈论的函数。
,您是在明确地谈论DOM,而不是内建函数。老实说,我找不到规范的相应部分。ECMA规范比w3网站更容易阅读.
发布于 2012-10-02 16:23:03
不会疼的。您甚至可以使用比所需的参数更少的参数来调用函数,只要函数代码可以使用一些未定义的值。
发布于 2019-07-24 09:39:16
我遇到了这个重要的问题,无论多么古老;我希望与它分享我的实验对子孙后代有益:
arguments对象来访问函数的参数,而不管函数签名中参数的数量。
值得一提的是,这不适用于箭头函数:
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);
arguments并不完全是Array“类似于数组”意味着参数有一个长度属性和从零索引的属性,但是它没有数组的内置方法,比如forEach()和map()。
因此,以下代码将导致错误:
(function singleArg(x) {
console.log(arguments); // This line works
arguments.forEach(x => console.log(x)); // This causes an error
})(1, 2);
undefined
(function twoArgs(a, b) {
console.log(`a: ${a}\nb: ${b}`);
})(1);
https://stackoverflow.com/questions/12694031
复制相似问题