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>