JavaScript计时器核心是setInterval(重复执行,如每秒更新)和setTimeout(延迟执行一次,如倒计时结束提示),需理解用途差异、配合使用、及时清理及规避精度误差。

用 JavaScript 实现简单计时器,核心就是 setInterval 和 setTimeout —— 前者用于**重复执行**(比如每秒更新时间),后者用于**延迟执行一次**(比如倒计时结束触发提示)。关键不是背语法,而是理解它们的用途差异和如何配合控制。
setInterval:启动并持续运行的“心跳”
它会按固定间隔反复调用函数,适合做实时计数、动画帧、轮询等。返回一个定时器 ID,后续可用 clearInterval 停止。
常见写法:
-
const timerId = setInterval(() => { console.log('滴'); }, 1000);—— 每秒打印一次 - 在计时器中通常配合变量累加:
let seconds = 0; setInterval(() => { seconds++; display(seconds); }, 1000); - 务必记得在不需要时清除,否则内存泄漏或逻辑错乱:
clearInterval(timerId);
setTimeout:只响一次的“闹钟”
它在指定毫秒后执行一次函数,适合延后操作、防抖、倒计时最后一刻提醒等。同样返回 ID,用 clearTimeout 可取消未执行的任务。
立即学习“Java免费学习笔记(深入)”;
小技巧:
原生js实现新年倒计时喜庆背景带炫酷雪花飘落动画特效代码下载。基于原生JavaScript+CSS实现,不依靠任何第三方jQuery库,兼容手机移动端,新年倒计时自动获取,可循环使用,非常简单实用的一款新年倒计时js特效代码。
- 模拟“等待3秒再开始计时”:
setTimeout(startTimer, 3000); - 实现倒计时(递归方式):
function countDown(n) { if (n countDown(n - 1), 1000); } - 比
setInterval更精准控制单次行为,尤其适合“执行一次就停”的场景
组合使用:一个实用的倒计时计时器示例
比如做一个 5 秒倒计时,结束后显示“时间到”。不用 setInterval 死守,也不用 setTimeout 纯递归,可以混搭:
- 用
setInterval每秒更新界面(让 UI 实时响应) - 用
setTimeout在第 5 秒末精确触发完成回调(避免 setInterval 累积误差) - 点击“暂停”时,
clearInterval;点击“继续”,重新setInterval
这样既保证视觉流畅,又确保终点动作不漂移。
注意几个易错点
实际写的时候容易踩坑:
-
setInterval(fn, 0)不会立刻执行,仍要进事件队列,最小间隔约 4ms(浏览器限制) - 如果回调执行时间 > 间隔时间,会“堆积”——比如 setInterval(heavyFn, 100),但 heavyFn 耗时 200ms,那它会连续无空隙执行
- 页面切到后台时,大多数浏览器会把 interval 降频(如 1s → 1s+),setTimeout 也可能延迟,别依赖它做高精度计时
- 不要在循环里直接写
setTimeout(() => ..., i * 1000)却没处理闭包问题——用let或包装 IIFE
基本上就这些。掌握好什么时候该“反复跑”,什么时候该“准时响一次”,再注意清理和误差,一个干净可用的计时器就出来了。









