严格模式下函数参数重名会直接报syntaxerror,无需额外防护;启用方式为脚本开头或函数体首行加"use strict";配套建议包括用箭头函数、eslint规则及避免arguments操作。

JavaScript 在严格模式下会自动禁止函数参数重名,不需要额外写代码去“防止”——只要启用了严格模式,重复参数名就会直接报 SyntaxError,阻止代码执行。
你只需要确保严格模式生效,系统就会帮你拦截这类错误。
严格模式如何让参数重名失效
在非严格模式下,以下写法是合法的(虽然不推荐):
function f(a, a) {
return a;
}
f(1, 2); // 返回 2(后一个 a 覆盖前一个)
但在严格模式下,同样的代码会立即报错:
"use strict";
function f(a, a) { } // ❌ SyntaxError: Duplicate parameter name in strict mode
这是严格模式内置的语法检查,发生在代码解析阶段,不是运行时检测,所以非常可靠。
确保严格模式生效的两种方式
-
整个脚本启用:把
"use strict";放在文件最开头(或紧跟在注释/空分号后)"use strict"; function f(a, a) { } // 报错 -
单个函数启用:只对特定函数启用,不影响其他代码
function safeFunc(a, a) { } // 非严格,不报错(但不建议) function strictFunc(a, a) { "use strict"; return a; // ❌ 这里直接报错,函数无法定义成功 }
⚠️ 注意:
"use strict"必须出现在函数体第一行(前面不能有实际执行语句),否则无效。
其他配套防护建议
虽然参数重名会被严格模式直接拦截,但为提升健壮性,还可配合:
- 使用现代语法如箭头函数、解构参数,天然规避命名冲突风险
- 在构建流程中加入 ESLint 规则(如
no-dupe-args),提前提示 - 避免手动操作
arguments对象,因严格模式下它不再与形参同步
比如这个非严格模式下的“陷阱”在严格模式下根本走不通:
function f(a) {
a = 10;
return arguments[0]; // 非严格 → 返回 10;严格 → 返回原传入值(不联动)
}
严格模式让行为更可预测,也堵住了这类隐式依赖。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











