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();