javascript函数的length属性表示形参列表中未赋默认值的参数个数,从左到右扫描,遇默认值、解构默认值或剩余参数即停止计数,且不反映运行时调用要求。

JavaScript中函数的length属性表示该函数**形参列表中未赋默认值的参数个数**,不是实际调用时传入的参数个数,也不是“预期参数个数”的通用定义——它只反映函数定义时的语法结构。
length只统计非默认值参数
函数length从左到右扫描形参,一旦遇到带默认值的参数(包括=、解构默认值、剩余参数前的参数),后续所有参数都不计入length。
-
function f(a, b) {}→f.length === 2 -
function g(a, b = 1) {}→g.length === 1(b有默认值,停止计数) -
function h([x, y] = [0, 0]) {}→h.length === 1(解构参数本身算一个形参,且带默认值) -
function i(a, ...rest) {}→i.length === 1(剩余参数不计入length,且它前面的参数仍被统计) -
function j(...rest) {}→j.length === 0(剩余参数本身不贡献长度)
箭头函数和bind后的函数也遵循相同规则
箭头函数的length同样基于其形参声明;Function.prototype.bind返回的绑定函数,其length为max(0, 原函数length - 绑定实参数量),但仅对**前置已绑定参数**生效。
-
const add = (a, b) => a + b;→add.length === 2 -
const add5 = add.bind(null, 5);→add5.length === 1(2 - 1 = 1) -
const always42 = () => 42;→always42.length === 0
length ≠ 调用所需最小参数个数
虽然length常被当作“最少需传几个参数”的参考,但它并不强制校验运行时行为。JavaScript允许少传或多传参数,且默认值、arguments、剩余参数等机制会改变实际逻辑。
-
function foo(a, b = 2) { return a + b; }:foo.length === 1,但foo(1)合法,foo()也合法(a为undefined) - 没有运行时机制根据
length自动报错或补默认值——那是开发者或工具(如TypeScript、JSDoc)的责任
与arguments.callee.length的区别(已废弃)
arguments.callee曾可访问当前执行函数,其length等同于函数自身length,但该属性在严格模式下禁用,现代代码应避免使用。当前推荐方式是直接引用函数名或使用Function.prototype.length。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











