在javascript语法中,我们知道length最多用于数组,其次字符串,但我们知道函数的length是多少吗,下面我们通过例子深入探讨。
形参个数
function fn1 () {}
function fn2 (name) {}
function fn3 (name, age) {}
console.log(fn1.length) // 0
console.log(fn2.length) // 1
console.log(fn3.length) // 2
可以看出,function有多少个形参,length就是多少,继续往下看
默认参数
function fn1 (name) {}
function fn2 (name = 'Q') {}
function fn3 (name, age = 18) {}
function fn4 (name, age = 18, gender) {}
function fn5 (name = 'Q', age, gender) {}
console.log(fn1.length) // 1
console.log(fn2.length) // 0
console.log(fn3.length) // 1
console.log(fn4.length) // 1
console.log(fn5.length) // 0
可以看出,function的length,就是第一个具有默认值之前的参数个数,继续往下看
剩余参数
function fn1 (name, ...args) {}
console.log(fn1.length) // 1
可以看出,剩余参数不会算进length中
结论
length 是函数对象的一个属性值,指该函数有多少个参数,即形参的个数。形参的数量不包括剩余参数个数以及含第一个具有默认值之后的参数个数
思考
123['toString'].length + 123 = ?