乐趣区

关于javascript:95的人都回答不上来的问题函数的length是多少

前言

大家好,我是林三心,我明天给大家讲讲 functionlength,到底是怎么算的。心愿大家能从中学到货色,并且能够坚固一下根底。

为什么

为什么我会想到这个知识点呢?因为昨晚,在一个群里,有一位同学在探讨一道字节跳动的面试题

123['toString'].length + 123 = ?

说实话这道题,我一开始也没答出来。其实我是晓得,面试官想考 Number 原型上的 toString 办法,然而我卡在了 toString 函数的 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 = 22) {}

function fn4 (name, age = 22, 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

阐明了,functionlength,就是 第一个具备默认值之前的参数个数

残余参数

在函数的形参中,还有 残余参数 这个货色,那如果具备 残余参数,会是怎么算呢?

function fn1(name, ...args) {}

console.log(fn1.length) // 1

能够看出,残余参数是不算进 length 的计算之中的

总结

总结之前,先颁布 123['toString'].length + 123 = ? 的答案是124

总结就是:length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数。形参的数量不包含残余 参数个数 ,仅包含 第一个具备默认值 之前的参数个数

结语

我是林三心,一个热心的前端菜鸟程序员。如果你上进,喜爱前端,想学习前端,那咱们能够交朋友,一起摸鱼哈哈,摸鱼群,加我请备注【思否】

退出移动版