SyntaxError: redeclaration of formal parameter "x"

JavaScript の例外 "redeclaration of formal parameter" は、関数の引数名としてある変数名が発生した後、関数本体内の let 代入文を使用して同じ変数名を再度宣言すると発生します。

メッセージ

SyntaxError: Let/Const redeclaration (Edge)
SyntaxError: redeclaration of formal parameter "x" (Firefox)
SyntaxError: Identifier "x" has already been declared (Chrome)

エラー種別

エラーの原因

関数の引数と同名の変数があり、関数内で再度 let 代入文を使用して再宣言しています。 JavaScript では、同じ関数内やブロックスコープ内で let を使用して同じ変数を再宣言できません。

再宣言した引数

この場合、変数 "arg" は、引数を再宣言しています。

function f(arg) {
  let arg = 'foo';
}

// SyntaxError: redeclaration of formal parameter "arg"

関数の本体内で "arg" の値を変更したい場合、これを行うことはできますが、再び同じ変数を宣言する必要はありません。言い換えれば、 let キーワードを省略することができます。新しい変数を生成する場合は、既存の関数の引数と競合するので、変数名を変更する必要があります。

function f(arg) {
  arg = 'foo';
}

function f(arg) {
  let bar = 'foo';
}

関連情報