Js计时器的小发现

今天在撸代码时,发现之前某个同事封装的倒计时方法有点奇怪,问题如下:

简单介绍这段代码的实现思路吧,主要是递归调用setTimeout来进行倒计时的,并且保存了 setTimeout 返回一个 ID(数字)。剩余10秒会弹出提示框,0秒时结束退出。
但是令我比较费解的是,它清除这个ID并不是用clearTimeout()来取消执行,而是clearInterval()。我印象中应该是setTimeoutclearTimeout是一对,setIntervalclearInterval是一对。
结果经过实践,对于setInterval和setTimeout返回的整数ID,clearInterval和clearTimeout是可以互用的。
并且在MDN有这样一段话:

大致意思是:setInterval()setTimeout()共享一个ID池,并且clearTimeout()clearInterval()可以在技术上互换使用。但是,为了清晰起见应始终保持匹配。

本着探索求知的精神,我也简单地实现了一个倒计时。代码如下:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div class="timeOut-wrapper">
        <div id="timeOutTips">
            因您长时间未操作,系统<span id="count" style="color: red;"></span>秒钟后将退出,您是否要继续操作?
        </div>
        <div class="btn-wrapper">
            <button id="continueBtn">继续</button>
            <button id="cancelBtn">暂停</button>
        </div>
    </div>

</body>
<script type="text/javascript">

    var count = 10; // 倒计时时长
    var pauseFlg = false; // 暂停标志
    var timeID = 0; // 计时器返回ID

    // 开始倒计时
    function startTiming() {
        if (timeID) {
            clearInterval(timeID);
        }
        timeID = setInterval(function() {
            if (count > 0) {
                count--;
                console.log(count);
                document.getElementById('count').innerHTML = count;
            } else {
                clearInterval(timeID);
                console.log("倒计时结束");
            }
        }, 1000);
    }

    // 暂停倒计时
    function pauseTiming() {
        clearInterval(timeID);
    }

    startTiming();
    document.getElementById('continueBtn').addEventListener('click', startTiming);
    document.getElementById('cancelBtn').addEventListener('click', pauseTiming);

</script>
</html>

略简陋,暂作为开发版把。- -||