SyntaxError: redeclaration of formal parameter "x"

当同一个变量名作为函数参数出现,然后在函数体中再次使用 let 赋值重新声明时,就会出现 JavaScript 异常“重新声明正式参数”。

消息

SyntaxError: Identifier "x" has already been declared (V8-based)
SyntaxError: redeclaration of formal parameter "x" (Firefox)
SyntaxError: Cannot declare a let variable twice: 'x'. (Safari)

错误类型

哪里出错了?

同一个变量名作为函数参数出现,然后在函数体中再次使用 let 赋值重新声明。在 JavaScript 中,不允许使用 let 在同一个函数或块作用域内重新声明同一个变量。

示例

重新声明的参数

在这种情况下,变量“arg”重新声明了参数。

js
function f(arg) {
  let arg = "foo";
}

// SyntaxError: redeclaration of formal parameter "arg"

如果要更改函数体中“arg”的值,可以这样做,但不需要再次声明同一个变量。换句话说:可以省略 let 关键字。如果要创建一个新的变量,则需要重命名它,因为与函数参数已经冲突。

js
function f(arg) {
  arg = "foo";
}

function g(arg) {
  let bar = "foo";
}

另请参阅