1
resposta

Pq o codigo não roda se eu não tiver a função anonima?


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

function tocaSom(idAudio){

    document.querySelector(idAudio).play;

}

//function clicarNoSom{
    while (i < listaDeTeclas.length) { 
        const tecla = listaDeTeclas[i];
        const instrumento = tecla.classList[1];
        const audio= (`#som_${instrumento}`)

        tecla.onclick = tocaSom(audio);

        i+=1;
        console.log(tecla);
        console.log(audio);

    }

Quando eu tiro a função anonima primeiramente da um erro em relação ao parenteses do 'play': "play() failed because the user didn't interact with the document first."

Depois quando tiro o parenteses não acontece nada. O programa deveria rodar sem a função anonima, estou errada?

Obrigada :)

1 resposta

Olá, Shaini.

Como vai?

Testei aqui, o código funciona sem a função anônima, porém não como deveria. tecla.onclick = tocaSom(audio)

Quando o código é executado sem a função, mesmo sem nenhum clique nos botões, todos os sons são executados, porque já está sendo atribuído os sons à variável em tempo de execução.

Por isso a funções no geral são uma boa solução para quando queremos que um código seja executado apenas quando for necessário, nesse caso, a função só será executada quando houver o click, e o som será reproduzido.

Espero ter ajudado!

Bons estudos!