Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Diferença no uso de referências

Com base nos conhecimentos do curso, eu procurei criar uma mesa de som com áudios de memes conhecidos. Durante o projeto, algo me deixou curioso ao trabalhar com JS.

Quando fiz a referência com o uso de 'const' ou 'var' dentro do loop FOR, os resultados foram diferentes. Neste caso, a alternativa correta é utilizar 'const' ao criar referências de elementos no JScript dentro do FOR.

  • Uso de const : Funciona perfeitamente. Cada tecla ao ser clicada emite seu respectivo áudio.
  • Uso de var : Não funciona como esperado. Qualquer tecla ao ser clicada emite o último áudio (class '.bad_total').

Gostaria de saber, portanto: Por que essa diferença acontece?

Código HTML ----------------------------------------

<!DOCTYPE html>
<html lang="pt-br">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="shortcut icon" href="image/icons8-midi-96.png" type="image/x-icon">

  <link rel="stylesheet" href="css/reset.css">
  <link rel="stylesheet" href="css/style.css">

  <title>GAmidi</title>
</head>

<body>
  <header>
    <h1 class="titulo-principal">
      GA midi
    </h1>
  </header>
  <section class="mesa-de-som">
    <button class="tecla bora_bill">bora bill</button>
    <button class="tecla bora_fi">bora fi</button>
    <button class="tecla bora_mulher">bora muié</button>

    <button class="tecla faro_tome">tome</button>
    <button class="tecla faro_papelao">papelão</button>
    <button class="tecla faro_filho">filho calma</button>

    <button class="tecla luva_receba">receba!</button>
    <button class="tecla instinto_superior">inst. superior</button>
    <button class="tecla bad_total">sem proprey</button>
  </section>

  <div class="botao-run">
    <button onclick="tocaRun()" class="run">
      <img title="RUN" src="image/icons8-run-67.png">
    </button>
  </div>

  <!-- AUDIOS -->
  <audio src="audio/bora-bill.mp3" id="som_bora_bill"></audio>
  <audio src="audio/bora-filho-do-bill.mp3" id="som_bora_fi"></audio>
  <audio src="audio/bora-mulher-do-bill.mp3" id="som_bora_mulher"></audio>
  <audio src="audio/tome.mp3" id="som_faro_tome"></audio>
  <audio src="audio/que-papelao.mp3" id="som_faro_papelao"></audio>
  <audio src="audio/filho-calma.mp3" id="som_faro_filho"></audio>
  <audio src="audio/receba.mp3" id="som_luva_receba"></audio>
  <audio src="audio/instinto-superior.mp3" id="som_instinto_superior"></audio>
  <audio src="audio/bad-total.mp3" id="som_bad_total"></audio>
  <audio src="audio/run.mp3" id="som_run"></audio>

  <script src="main.js"></script>
</body>

</html>

Código JScript (uso de const) ---------------------------------------

function tocaRun() {
  document.querySelector("#som_run").play();
}

const listaDeMemes = document.querySelectorAll(".tecla");

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

for(i = 0; i < listaDeMemes.length; i++) {

  const botoes = listaDeMemes[i];
  const meme = botoes.classList[1];

  const idAudio = `#som_${meme}`;

  botoes.onclick = function() {
    tocaSom(idAudio);
  }
}

Código JScript (uso de var) ---------------------------------------------

function tocaRun() {
  document.querySelector("#som_run").play();
}

const listaDeMemes = document.querySelectorAll(".tecla");

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

for(i = 0; i < listaDeMemes.length; i++) {

//está aqui a diferença
  var botoes = listaDeMemes[i];
  var meme = botoes.classList[1];
  var idAudio = `#som_${meme}`;

  botoes.onclick = function() {
    tocaSom(idAudio);
  }
}

Desde já, agradeço seu tempo em ler o tópico :)

1 resposta
solução!

Olá Joab, tudo bem?

Pedimos desculpa pela demora em obter um retorno.

Está é uma ótima pergunta!

Podemos interpretar esta dúvida por meio do entendimento da propriedade que constitui essas variáveis, a propriedade de atribuição de um valor.

A atribuição de uma const só ocorre uma única vez, pois essa variável é imutável, ou seja, a partir do momento que armazenamos um valor nela, este valor não pode ser reatribuído. A var é uma variável mutável, onde o seu valor pode ser modificado/reatribuído como segue exemplo abaixo:

var teste = "Valor Inicial";
teste = "Valor final";
alert(teste);

No caso da var ela pega todos os valores de uma única vez, enquanto na const pega apenas um por vez, pois não é possível atribuir a ela vários valores.

Se tiver o interesse em se aprofundar mais nesses conhecimentos sugiro o seguinte artigo:

Se precisar de ajuda conte conosco!

Tenha um bom dia e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓