Li em alguns artigos que: Quando não se declara o escopo da variável, ela assume o valor global (ou seja, ela assume que é uma var).
É possível observar que eu cometi um "erro" na linha em que declaro a variável idAudio
que não assume o escopo de uma constante mas de uma variavel global. Veja:
const listaDeTeclas = document.querySelectorAll('.tecla');
function tocaSom(idAudioElement){
document.querySelector(idAudioElement).play();
}
for(i=0; i<listaDeTeclas.length; i++){
const tecla = listaDeTeclas[i];
const instrumento = tecla.classList[1];
idAudio = `#som_${instrumento}`;
console.log(idAudio);
listaDeTeclas[i].onclick = function () {
tocaSom(idAudio);
}
}
Ao realizar o teste, vi que, apesar que ela possuir seu valor reassinalado a cada loop, conforme mostra o console:
as teclas possuiam todas o mesmo som: o último valor atribuído à variável idAudio
(que seria #som_tecla_tom).
E aí que vem a minha dúvida: POR QUE?
Por que a variável global não guarda o valor de cada som no loop mas a constante sim?