Ricorda che è di separare la logica dalla view, dunque l'onclick() nell'html è una “bad practice”, cosi come utilizzare :
type="text/javascript"
nello script, in html5 questo è superfluo visto che dovrebbe essere il valore di default.
Questo è un esempio di come potresti implementare il tuo codice. Ciao
<!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>
Input: <input id="num" type="text">
<input id="calcola" type="button" value="calcola"><br>
Output:
<div id="vis" style="margin-left: 40px;"></div>
<script>
const num = document.getElementById('num')
const calcolaBtn = document.getElementById('calcola')
const view = document.getElementById('vis')
let tempNum = null
let time = null
calcolaBtn.addEventListener('click', calcola)
num.addEventListener('change', checkTime)
function checkTime() {
tempNum = +num.value
clearTimeout(time)
}
function calcola() {
view.textContent = tempNum
if (tempNum > 0 && Number.isInteger(tempNum)) {
tempNum--
time = setTimeout(calcola, 1000)
}
}
</script>
</body>
</html>