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)

Тип ошибки

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

Попытка доступа к лексической переменной до её инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов 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();

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