请解释函数的 length 属性代表的意义

推荐答案

函数的 length 属性表示函数期望接收的形参的个数。它不包括剩余参数(rest parameters)、默认参数和解构赋值参数。简而言之,length 属性计算的是函数定义时明确声明的必选参数的数量。

本题详细解读

  1. length 属性的定义: length 是函数对象的一个内置属性,它返回一个整数值。这个值等于函数定义中声明的形参的个数。

  2. 形参 vs. 实参:

    • 形参(parameters):函数定义时,在函数签名中声明的变量名,例如 function add(a, b) { ... } 中的 ab
    • 实参(arguments):函数调用时,传递给函数的实际值,例如 add(1, 2) 中的 12
    • length 属性只关心形参的数量,与调用时传入的实参数量无关。
  3. length 属性的计算规则:

    • 普通参数:每一个声明的普通参数都会增加 length 属性的值。
    • 剩余参数(rest parameters):剩余参数使用 ... 表示,例如 function func(a, ...rest) { ... },剩余参数不会计入 length 属性。
    • 默认参数:默认参数在形参列表中用 = 赋值,例如 function greet(name = "Guest") { ... },默认参数不会计入 length 属性。
    • 解构赋值参数:解构赋值参数也不会计入 length 属性,例如 function point({x, y}) { ... }
  4. 示例:

    -- -------------------- ---- -------
    -------- -------- -- -- - -
    --------------------------  -- -- -
    
    -------- -------- -- -------- - -
    --------------------------  -- -- -
    
    -------- -------- - - -- -- - -
    --------------------------  -- -- -
    
    -------- ------- -- - -- - -
    -------------------------- -- -- -
    
    -------- -------- ------ -- --------- -
    -------------------------- -- -- -
  5. length 属性的使用场景:

    • 参数校验:虽然不绝对可靠,但可以通过 length 属性获取函数期望的参数个数,对传入的参数进行初步校验,以确保函数正常运行。
    • 高阶函数:某些高阶函数可能需要根据目标函数的形参个数进行适配,length 属性可以提供相关信息。
    • 函数自省:在调试和编写框架时,可以利用 length 属性对函数进行分析。
  6. length 属性与 arguments.length 的区别:

    • length 是函数对象的属性,表示期望的形参个数。
    • arguments.length 是在函数内部使用的一个类数组对象,表示函数调用时传入的实际参数个数。
    • 这两个属性的含义和使用场景不同。arguments 对象已不推荐使用,推荐使用剩余参数 ...rest
纠错
反馈