1
resposta

Sobre escopos das variáveis

Sobre o código a seguir, estou com dúvidas

index.html

<!DOCTYPE html>
<html lang="en">
  <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" />
    <title>Document</title>
  </head>
  <body>
    <script src="script.js" defer></script>
    <h1></h1>
    <p>
      <label for="quantidade">Quantidade:</label>
      <input name="quantidade" id="quantidade" type="text" />
    </p>

    <p>
      <label for="valor">Valor: </label>
      <input name="valor" id="valor" type="text" />
    </p>
    <div>
      <button onclick="calcular()" id="desconto">Calcular o Desconto</button>
    </div>
  </body>
</html>

Script:

let texto = document.querySelector('h1');
texto.innerHTML = 'Título';

function calcular() {
  let quantidade = parseInt(document.getElementById('quantidade').value);
  let valor = parseFloat(document.getElementById('valor').value);

  let total = quantidade * valor;

  if (quantidade >= 10 || valor >= 100) {
    total = total - (total / 100) * 5;
    alert(`Valor total: ${total} `);
    reiniciar()
  } else {
    alert('Não tem desconto')
    reiniciar()
  }
}

function reiniciar() {
  quantidade.value = '';
  valor.value = '';
}

Esse código funcionou perfeitamente, mas como dito na atividade que deveria ser declarado fora da função fiquei com dúvidas. Eu não declarei novamente dentro da função reiniciar e mesmo assim consegui usar essas variáveis, fora isso mudei o value e não com innerHTML, alguém pode me explicar melhor essa questão do escopo no Javascript?

1 resposta

Bom dia!

var, let e const não são tipos de variáveis como int, string. Javacript não define tipos. Aqui, a diferença é com relação ao escopo/visibilidade da variável ou constante.

Existem três tipos de declarações em JavaScript.

  • var: Declara uma variável, opcionalmente, inicializando-a com um valor.
  • let: Declara uma variável local de escopo do bloco, opcionalmente, inicializando-a com um valor.
  • const: Declara uma constante de escopo de bloco, apenas de leitura.

Você pode declarar uma variável de três formas:

  • Com a palavra chave var. Por exemplo, var x = 42. Esta sintaxe pode ser usada para declarar tanto variáveis locais como variáveis globais.
  • Por simples adição de valor. Por exemplo, x = 42. Isso declara uma variável global. Essa declaração gera um aviso de advertência no JavaScript. Você não deve usar essa variante.
  • Com a palavra chave let. Por exemplo, let y = 13. Essa sintaxe pode ser usada para declarar uma variável local de escopo de bloco. Veja escopo de variável abaixo.

O const deixa de ser "variável", pois não se modifica. Então é tratada como "constante"

Espero ter ajudado. Se sua dúvida foi sanada, marque este tópico como solucionado.

Bons estudos!