语法错误:重复的形式参数 x
当函数创建两个或多个具有相同名称的参数绑定,并且函数不是非严格函数且仅具有简单参数时,会发生 JavaScript 异常 "重复的形式参数 x" 或 "重复的参数名称在此上下文中不允许"。
消息
SyntaxError: Duplicate parameter name not allowed in this context (V8-based) SyntaxError: duplicate formal argument x (Firefox) SyntaxError: duplicate argument names not allowed in this context (Firefox) SyntaxError: Cannot declare a parameter named 'x' in strict mode as it has already been declared. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with default parameter values. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with a rest parameter. (Safari) SyntaxError: Duplicate parameter 'x' not allowed in function with destructuring parameters. (Safari)
错误类型
哪里出错了?
拥有两个具有相同名称的形式参数很可能是错误的——第二次出现会导致第一次出现通过参数名称不可访问。 在旧版本的 JavaScript 中,这是允许的。 因此,为了不破坏现有的代码,只有在代码保证不是旧版本的代码时才会出现错误——要么因为它处于严格模式,要么它使用现代的参数语法 (rest、默认或解构参数)。
示例
无效情况
js
"use strict";
function add(x, x) {
// How can you access both "x" parameters?
// SyntaxError: duplicate formal argument x
}
js
function doSomething(name, { name }) {
// How can you access both "name" parameters?
// SyntaxError: duplicate argument names not allowed in this context
}
有效情况
js
function doSomething(operationName, { name: userName }) {
// You can access both "operationName" and "userName" parameters.
}
function doSomething(name, user) {
// You can access both "name" and "user.name" parameters.
}