我有一个像
这样的功能function f(a=1, b) {
console.log(a, b);
}
console.log(f.length);
我希望获得f f.length
的长度,但我得到的是 0 而不是 2 。但是当我将a
更改为普通形式参数而没有默认值时,f.length
的结果是 2 ,为什么?
答案 0 :(得分:4)
预期的行为是什么,请检查MDN docs of Function.length
:
length是函数对象的一个属性,表示函数期望的参数数量,即形式参数的数量。此数字不包括rest参数,仅包含第一个参数之前的参数,默认值为。相比之下,arguments.length是函数的本地,并提供实际传递给函数的参数数量。
答案 1 :(得分:2)
如MDN docs中所说,
Function.length包含第一个参数之前的参数 默认值。
在您的示例函数中,第一个参数本身的默认值为1
,因此Function.length
不包含您在a
之后提供的任何参数。
因此它为您提供了值0
。
为了让事情更清晰,请考虑以下片段:
//no arguments with default value
function f(a, b) {
console.log('hello');
}
console.log('No of arguments ' + f.length);
输出为2
//second argument has defualt value. Thus only argument a that is before the
//argument having default value is included by Function.length
function f(a, b=1) {
console.log('hello');
}
console.log(f.length);
输出为1
//second argument has defualt value .
//but only arguments before the argument having default value are included
//thus b and c are excluded
function f(a, b=2, c) {
console.log('hello');
}
console.log(f.length);
输出为1