SyntaxError: redeclaration of formal parameter "x"

Mensagem

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

Tipo de Erro

SyntaxError

O que deu errado?

O mesmo nome de variável ocorre como parâmetro da função e é então redeclarada atribuindo let no corpo da função. Redeclarando a mesma variável dentro da mesma função ou no escopo do bloco usando let não é permitido em JavaScript.

Exemplos

Neste caso, a variável "arg" redeclara o argumento.

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

// SyntaxError: redeclaration of formal parameter "arg"

Se você quiser mudar o valor de "arg" no corpo da função, você pode fazer, mas você não precisa declarar novamente a mesma variável. Em outras palavras: você pode omitir a palavra chave let. Se você quiser criar uma nova variável, você precisa renomea-la, pois isso conflita com o parâmetro da função.

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

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

Notas de compatibilidade

  • Antes do Firefox 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46), isto foi lançado como um TypeError (bug 1275240).

Veja também