Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] ReferenceError: Cannot access 'creaElemento' before initialization

Olá, tenho uma dúvida de conceito, normalmente nas minhas declarações de funcções eu uso a forma de escrita com arrows function. Porém esse modo de escrita da função me retorna o erro no título ReferenceError: Cannot access 'creaElemento' before initialization quando tento renderizar os items do localStorage na tela.

Deste modo:

const items = JSON.parse(localStorage.getItem('items')) || [];

items.forEach((el) => {
    creaElemento(el);
});

const creaElemento = (item) => {
    bloco de código aqui...
}

Minha solução para sumir com o erro foi rescrever a função com a sitaxe antiga e funcionou o erro sumiu, porém fiquei sem perceber a razão. É correto dizer que as arrow-function não são içadas pelo javascript no momento da leitura do arquivo?

Outra tentativa que tamb]em funcionou foi mover a chamada da função para depois da sua inicialização/declaração, no caso na linha abaixo.

function creaElemento(item) {
    bloco de código aqui...
}

items.forEach((el) => {
    creaElemento(el);
});
1 resposta
solução!

Olá João, tudo bem?

Sim, você está correto. As arrow-functions não são içadas (hoisted) pelo JavaScript, o que significa que elas não podem ser acessadas antes da sua declaração.

No seu primeiro exemplo de código, a chamada da função creaElemento é feita antes de sua declaração usando arrow-function, por isso ocorre o erro de referência antes da inicialização.

Já no segundo exemplo, a chamada da função creaElemento é feita após sua declaração usando a sintaxe antiga de função, o que resolve o problema de referência.

Dessa forma, a arrow-function é declarada antes da chamada dentro do loop e não ocorre mais o erro de referência.

Espero ter ajudado, qualquer dúvida, me coloco à disposição! Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!