javascript函数的length属性返回其定义时声明的普通形参个数,不包括默认参数、剩余参数和解构参数内部结构;它只统计最前面无默认值的非剩余参数,且为只读静态属性。

JavaScript 中函数的 length 属性直接返回该函数定义时**声明的形参个数**,不包括默认参数、剩余参数(...)和解构参数中的嵌套结构。
length 只统计“普通形参”的数量
函数 length 是一个只读属性,反映的是函数定义时出现在参数列表最前面、未赋默认值、且非剩余参数的形参个数。
- 有默认值的参数及其之后的所有参数,都不计入
length - 剩余参数(
...args)不计入length - 解构参数(如
({a, b})或[x, y])按一个形参计算,但其内部结构不影响length
常见情况示例
看几个典型例子:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function foo(a, b, c) {}
console.log(foo.length); // 3
function bar(a, b = 10, c) {}
console.log(bar.length); // 1(只有 a 没有默认值,b 和 c 不再计入)
function baz(a, ...rest) {}
console.log(baz.length); // 1(...rest 不算)
function qux({x, y}, [m, n], z = 5) {}
console.log(qux.length); // 2({x,y} 算 1 个,[m,n] 算 1 个,z 有默认值,不计)
注意:length 和实际调用无关
length 是静态属性,和函数是否被调用、传了多少实参完全无关。它只由函数声明时的语法决定。
-
foo.length不会因为foo(1)或foo(1,2,3,4)而改变 - 箭头函数、class 构造器、bind 后的函数也都有
length,规则相同 -
Function.prototype.length是 0(因为原生构造器形参个数为 0)
实用小技巧:判断函数最少需要几个参数
可以借助 length 做简易参数校验或自动补全逻辑:
function callWithArgs(fn, args = []) {
const needed = fn.length;
const actual = args.length;
if (actual Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










