Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Bug] Uncaught SyntaxError - const, let e var

Gostaria de saber se há algo de errado com meu código que não estou vendo, se é algum tipo de bug, ou alguma atualização recente, pois meu código tanto no chrome quanto no firefox dá a mensagem de erro "Uncaught SyntaxError: Identifier 'listaDeTeclas' has already been declared (at main.js:1:1)", tanto para 'listaDeTeclas' quanto 'contador'. Ao substituir o escopo de ambas variáveis para global (var), ao invés de 'let' ou 'const', o código funciona perfeitamente.

function tocaSom(idElementoAudio){
    document.querySelector(idElementoAudio).play();
}

const listaDeTeclas = document.querySelectorAll('.tecla'); 
let contador = 0;

while(contador < listaDeTeclas.length){

    const tecla = listaDeTeclas[contador];
    const instrumento = tecla.classList[1];
    const idAudio = `#som_${instrumento}`;

    tecla.onclick = function () {
        tocaSom(idAudio);
    }
    console.log(idAudio);
    contador++;
}

Alguma sugestão ou explicação?

4 respostas

Olá Renan!

Pelo que pude analisar, o erro "Uncaught SyntaxError: Identifier 'listaDeTeclas' has already been declared" ocorre porque você está tentando declarar a variável 'listaDeTeclas' novamente dentro do loop while. Isso não é permitido quando você usa 'let' ou 'const', pois essas declarações têm escopo de bloco.

Uma solução para resolver esse problema é mover a declaração da variável 'listaDeTeclas' para fora do loop while, assim:

const listaDeTeclas = document.querySelectorAll('.tecla'); 
let contador = 0;

while(contador < listaDeTeclas.length){
    const tecla = listaDeTeclas[contador];
    const instrumento = tecla.classList[1];
    const idAudio = `#som_${instrumento}`;

    tecla.onclick = function () {
        tocaSom(idAudio);
    }
    console.log(idAudio);
    contador++;
}

Dessa forma, a variável 'listaDeTeclas' será declarada apenas uma vez e estará disponível dentro do loop while.

Espero ter ajudado e bons estudos!

Então, o seu código está exatamente igual ao meu... rs Mas em todo caso, mesmo que eu comente toda a parte da estrutura de repetição while, o erro ainda persiste.

solução!

Descobri o motivo do erro em questão...

Não está relacionado ao arquivo .js em sim, mas sim ao arquivo .html, onde o script foi declarado tanto no header quanto no final do body. Apenas apaguei a chamada no body e tudo resolvido.

Dopamina liberada com sucesso! :)

Ah ta. rsrs.

Que bom que conseguiu resolver :) quando for assim compartilha o HTML também.