function的length,到底是怎么算的?
目录
为什么我会想到这个知识点呢?因为这是一道字节跳动的面试题:
123['toString'].length + 123 = ?
说实话这道题,我一开始也没答出来。其实我是知道,面试官想考 Number 原型上的toString
方法,但是我卡在了 toString 函数的 length 是多少这个难题上,所以才有了今天这篇文章。
function 的 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
就是多少。但是事实真是这样吗?继续往下看。
默认参数
如果有默认参数的话,函数的length
会是多少呢?
function fn1 (name) {} function fn2 (name = '码云笔记') {} function fn3 (name, age = 4) {} function fn4 (name, age = 4, gender) {} function fn5(name = '前端博客', 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
的计算之中的
总结
总结之前,先公布123['toString'].length + 123 = ?
的答案是124
总结就是:length
是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数。形参的数量不包括剩余参数个数
,仅包括第一个具有默认值
之前的参数个数。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » function的length,到底是怎么算的?
码云笔记 » function的length,到底是怎么算的?