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

Mensagem

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

Tipo de Erro

O que está errado

Uma variável léxica foi acessada antes de ser inicializada. Isso acontece dentro de qualquer declaração de bloco, quando as declarações let ou const são acessadas antes de serem definidas.

Exemplos

Errado

Neste caso, a variável "foo" é redeclarada usando let.

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

Certo

Para mudar "foo" dentro do bloco if você precisa remover o let que causa a redeclaração.

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

Veja também