JavaScript定时器用于延迟或重复执行代码,主要包含setTimeout(延迟执行一次)和setInterval(周期性重复执行),二者均可通过clearTimeout和clearInterval清除,需注意定时器延迟不精确、避免内存泄漏及合理封装使用。

JavaScript定时器用于在指定时间后执行代码,或按固定间隔重复执行。主要有两种定时器:setTimeout 和 setInterval,它们都属于浏览器的 window 对象(在 Node.js 中是 global 对象)。
1. setTimeout:延迟执行一次
在指定毫秒数后执行一次函数,常用于延迟操作。
语法:setTimeout(function, delay, param1, param2, ...)
- function:要执行的函数
- delay:延迟时间(毫秒)
- param:传递给函数的参数(可选)
示例:
setTimeout(() => {
console.log("3秒后打印");
}, 3000);
清除定时器使用 clearTimeout:
const timerId = setTimeout(() => {
console.log("不会执行");
}, 2000);
// 取消定时器
clearTimeout(timerId);
2. setInterval:周期性重复执行
每隔指定时间重复执行函数,适用于轮询、倒计时等场景。
setInterval(function, interval, param1, param2, ...)
- interval:重复间隔时间(毫秒)
示例:每秒打印一次
const intervalId = setInterval(() => {
console.log("每秒打印一次");
}, 1000);
停止重复执行需调用 clearInterval:
// 5秒后停止
setTimeout(() => {
clearInterval(intervalId);
console.log("停止重复执行");
}, 5000);
3. 注意事项与技巧
- 定时器的延迟不精确,受浏览器性能、任务队列影响,实际执行可能稍有延迟
- 避免在循环中直接创建未保存 ID 的定时器,否则无法清除
- 在组件销毁或页面跳转前务必清除定时器,防止内存泄漏
- 可以结合 Promise 封装更灵活的延时函数
封装一个延迟函数:
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用
async function demo() {
console.log("开始");
await delay(2000);
console.log("2秒后执行");
}
基本上就这些。掌握 setTimeout 和 setInterval 的基本用法和清除方式,就能应对大多数定时任务需求。










