推荐答案
函数的 length
属性表示函数期望接收的形参的个数。它不包括剩余参数(rest parameters)、默认参数和解构赋值参数。简而言之,length
属性计算的是函数定义时明确声明的必选参数的数量。
本题详细解读
length
属性的定义:length
是函数对象的一个内置属性,它返回一个整数值。这个值等于函数定义中声明的形参的个数。形参 vs. 实参:
- 形参(parameters):函数定义时,在函数签名中声明的变量名,例如
function add(a, b) { ... }
中的a
和b
。 - 实参(arguments):函数调用时,传递给函数的实际值,例如
add(1, 2)
中的1
和2
。 length
属性只关心形参的数量,与调用时传入的实参数量无关。
- 形参(parameters):函数定义时,在函数签名中声明的变量名,例如
length
属性的计算规则:- 普通参数:每一个声明的普通参数都会增加
length
属性的值。 - 剩余参数(rest parameters):剩余参数使用
...
表示,例如function func(a, ...rest) { ... }
,剩余参数不会计入length
属性。 - 默认参数:默认参数在形参列表中用
=
赋值,例如function greet(name = "Guest") { ... }
,默认参数不会计入length
属性。 - 解构赋值参数:解构赋值参数也不会计入
length
属性,例如function point({x, y}) { ... }
。
- 普通参数:每一个声明的普通参数都会增加
示例:
-- -------------------- ---- ------- -------- -------- -- -- - - -------------------------- -- -- - -------- -------- -- -------- - - -------------------------- -- -- - -------- -------- - - -- -- - - -------------------------- -- -- - -------- ------- -- - -- - - -------------------------- -- -- - -------- -------- ------ -- --------- - -------------------------- -- -- -
length
属性的使用场景:- 参数校验:虽然不绝对可靠,但可以通过
length
属性获取函数期望的参数个数,对传入的参数进行初步校验,以确保函数正常运行。 - 高阶函数:某些高阶函数可能需要根据目标函数的形参个数进行适配,
length
属性可以提供相关信息。 - 函数自省:在调试和编写框架时,可以利用
length
属性对函数进行分析。
- 参数校验:虽然不绝对可靠,但可以通过
length
属性与arguments.length
的区别:length
是函数对象的属性,表示期望的形参个数。arguments.length
是在函数内部使用的一个类数组对象,表示函数调用时传入的实际参数个数。- 这两个属性的含义和使用场景不同。
arguments
对象已不推荐使用,推荐使用剩余参数...rest
。