语法错误:重复的形式参数 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.
}

另请参阅