ReferenceError: can't access lexical declaration`X' before initialization

В процессе перевода.

Сообщение

ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
ReferenceError: 'x' is not defined (Chrome)

Тип ошибки

ReferenceError

Что случилось?

Попытка доступа к лексической переменной до ее инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов let или const до того, как им было присвоено значение.

Примеры

Неправильно

Здесь переменная "foo" заново объявляется внутри блока с помощью ключевого слова let.

function test() {
  let foo = 33;
  if (true) {
    let foo = (foo + 55); 
    // ReferenceError: can't access lexical 
    // declaration `foo' before initialization
  }
}
test();

Правильно

Чтобы изменить "foo" в теле выражения if, надо убрать ключевое слово let и таким образом избавиться от повторного объявления.

function test(){
   let foo = 33;
   if (true) {
      foo = (foo + 55);
   }
}
test();

См. также

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

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