JavaScript 函数的length属性
2020-12-21 本文已影响0人
O无为学长O
函数 的 length 指的是函数声明时,形参的个数
function fn1 () {} // length 为 0
function fn1 (a) {} // length 为 1
function fn1 (a,b,c) {} // length 为 3
本来这是一个很好理解的知识点,但ES6之后,就稍微变得有一些绕了,原因在于 ES6 更新了一个新特性,让函数可以给形参设置默认值
// 这种写法在 ES6 之前是不允许的
function fn1 (a,b = 10) {}
有了这一新特性之后,length 的解释就要修改成这样: length 的值是指函数的第一个具有默认值的形参之前的形参的个数。
是不是有念绕口令的感觉?
举例说明应该就比较好理解了
function fn1 (a,b) {} // 因为 a, b 都没有默认值,length 的值为 2
function fn2 (a=1,b) {} // 因为 a 为“第一个具有默认值的形参”,而a的前面没有其它形参了,所以 length 为 0
function fn3 (a,b=1,c) {} // b为 “第一个具有默认值的形参”,前面还有a, length 值为 1
function fn4 (a,b,c=1) {} // length 值为 2
function fn5 (a,b=1,c,d=2) {} // length 值为 1 (第一个具有默认值的形参为b,前面只有a)
看了上面的例子,是不是好理解很多了呢?
需要注意的是下面这个例子
function fn1 (a,...args) {} // length 值为 1
// ...args 是有默认值的,默认为一个空数组。
另外,JS中几个内置的构造函数,也是函数,所以也是有length属性的,但值各不相同,以下是我测试得到的结果
Array.length // 1
Number.length // 1
Function.length // 1
String.length // 1
Boolean.length // 1
Object.length // 1
RegExp.length // 2
Date.length // 7