メッセージ
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";
}
互換性の注記
- Firefox 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46) 以前では、
TypeError(バグ 1275240) がスローされます。
関連項目
letconstvar- JavaScript ガイド 内の 宣言