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)

错误类型

SyntaxError

哪里出错了?

同一个变量名既作为函数参数出现,又在函数体中使用 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";
}

另见