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?