1
resposta

Porque tenho que armazenar o valor em uma constante?

Sei das boas práticas de para facilitar a leitura do código, más gostaria de saber porque o código abaixo não funciona sem eu armazenar o valor de (listaDeTeclas[contador].classList[1]) dentro de uma constante? apenas colocando direto na propriedade da função (tocaSom(aqui)) na concatenação com a outra string.

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

const listaDeTeclas = document.querySelectorAll('.tecla');

let contador = 0;

while(contador < listaDeTeclas.length){
    //const instrumento = listaDeTeclas[contador].classList[1]
    listaDeTeclas[contador].onclick = function(){
        tocaSom('#som_'+ listaDeTeclas[contador].classList[1])
    };
    contador = contador+1;
}
1 resposta

Oi, Marcos, tudo bem?

A razão pela qual você precisa armazenar o valor de listaDeTeclas[contador].classList[1] em uma constante é porque você está usando essa informação em uma função anônima que é atribuída ao evento onclick de cada elemento da lista de teclas.

Quando a função anônima é executada, ela não tem acesso direto ao valor de contador, pois a função é criada durante a execução do loop while e não tem uma referência direta ao valor atual de contador.

Ao armazenar o valor de listaDeTeclas[contador].classList[1] em uma constante, você está criando um escopo local para a função anônima, permitindo que ela acesse o valor correto de contador quando for executada.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

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