首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[教程]95%的人都回答不上来的问题:函数的length是多少?

发布于 2024-10-17 15:44:43
0
94

为什么为什么我会想到这个知识点呢?因为昨晚,在一个群里,有一位同学在讨论一道字节跳动的面试题123.length + 123 ?说实话这道题,我一开始也没答出来。其实我是知道,面试官想考Number...

为什么

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

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

说明了,function的length,就是第一个具有默认值之前的参数个数

剩余参数

在函数的形参中,还有剩余参数这个东西,那如果具有剩余参数,会是怎么算呢?

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

console.log(fn1.length) // 1

可以看出,剩余参数是不算进length的计算之中的

总结

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

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

评论
一个月内的热帖推荐
小蜗锅
Lv.1普通用户

153

帖子

13

小组

310

积分

赞助商广告
站长交流