
JavaScript 中函数的 length 属性是只读的,无法被动态修改。
尝试给函数的 length 赋值(例如 fn.length = 5)在严格模式下会抛出 TypeError,在非严格模式下则静默失败——赋值无效,原值保持不变。
function foo(a, b) {}
console.log(foo.length); // 2
foo.length = 10;
console.log(foo.length); // 仍然输出 2这是因为 length 是函数对象的一个不可写(writable: false)、不可配置(configurable: false) 的自有属性。可通过 Object.getOwnPropertyDescriptor 验证:
const desc = Object.getOwnPropertyDescriptor(foo, 'length');
console.log(desc);
// { value: 2, writable: false, enumerable: false, configurable: false }- 不可写(writable: false) → 不能重新赋值
- 不可配置(configurable: false) → 不能删除或修改其属性描述符
-
不可枚举(enumerable: false) →
for...in不会遍历到它
所以,无论你用什么方式试图“动态改变”函数的 length,结果都只有一个:无效果。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
如果你想让函数表现出不同的“期望参数个数”,唯一可行的方式是在定义时调整形参结构,例如:
- 移除/增加普通形参
- 使用默认参数(会缩短
length,只计无默认值的前置参数) - 使用剩余参数(不计入
length)
这些都会在函数创建时决定 length 值,之后就固化了。
本质上,length 是函数定义的静态快照,不是运行时可变的状态。

















