この記事は編集レビューを必要としています。ぜひご協力ください。
メッセージ
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) がスローされます。
関連項目
let
const
var
- JavaScript ガイド 内の 宣言