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";
}

另見