2
respostas

[Dúvida] como o while funciona aqui?

O JavaScript vai rodar completo todas às vezes que eu clicar em um botão? Fiquei na dúvida, pois não conseguir entender como o código consegue identificar qual botão estou clicando; a minha teoria é que o while é chamado toda vez que clico em um botão, então ele roda toda a lista e executa a função do botão certo, pois foi o único que recebeu o onclick. No entanto, isso não faz sentido, pois se o while rodasse todas às vezes que clicamos no botão, o console.log deveria aparecer no console de novo. Para mim ficou parecendo meio magico, principalmente como o programa identifica qual botão estou clicando. Quero ser mais claro na minha dúvida.

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

function tocarSom(idDoSom) {
    document.querySelector(idDoSom).play();
}

let cont = 0;

while (cont < listaTeclas.length){
    const tecla = listaTeclas[cont];
    const intrumento = tecla.classList[1];
    const idAudio = `#som_${intrumento}`
    tecla.onclick = function() {tocarSom(idAudio)};
    cont +=1;
    console.log(cont)
};

Seguindo a ordem do código:

1 criamos uma variável com uma lista da tecla.

2 criamos uma função que vai chamar e tocarSom, conforme o id passado por parâmetro.

3 criamos um contador para iniciar o while.

4 criamos um while.

4.1 criamos uma variável que selecionara da lista de teclas apenas uma teclas, conforme o contador.

4.2 criamos uma variável que pega no nome da segunda classe da tecla.

4.3 criamos uma variável que usa a segunda classe da tecla para compor o id do áudio específico.

4.4 determinamos onclick na tecla, o onclick vai criar uma função anonima, essa função anonima vai chamar a função tocarSom que criamos mais a cima.

4.5 o contador e somado com mais 1.

4.6 o console imprime o contador

5 o while se encerra quando o cont é maior que o número de elementos na lista.

Para mim o programa se encerra aí.

Quando que o while se inicia de novo? Ele se inicia de novo?

Se não se inicia, com oque ele identifica a tecla que cliquei? Se se inicia, porque o console.log não é impresso de novo no console?

2 respostas

Como não tem como apagar os posts, eu irei me responder, pois acabei de entender.

Na verdade, o problema do meu entendimento sobre como o programa funciona, estava na não compreensão do onclick. Estava pensando que o onclick era acionado todas às vezes que um botão era clicado, mas, na verdade, o onclick atribui uma funcionalidade para quando o botão for clicado. E essa funcionalidade basta ser atribuída uma vez. Então o que acontece no while é que ele esta atribuindo uma funcionalidade para cada botão, então depois que o while se encerra todos os botões têm uma função atribuída através do onclick. Acredito que seja isso, se estiver errado, me corrijam.

Oi, Alef, tudo bem?

Fico feliz que tenha conseguido solucionar sua dúvida. Espero que a resolução tenha sido tranquila.

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!