Сообщение

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

Тип ошибки

SyntaxError

Что пошло не так?

Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено еще раз в теле функции с помощью оператора присваивания 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 до Firefox 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46), у данной ошибки был тип TypeError (баг 1275240).

Смотрите также

Метки документа и участники

Внесли вклад в эту страницу: KTatyana
Обновлялась последний раз: KTatyana,