js实现定时
使用 setTimeout 实现单次定时
setTimeout 用于在指定延迟后执行一次函数,延迟单位为毫秒。语法如下:
setTimeout(() => {
console.log('执行一次');
}, 1000); // 1秒后执行
清除单次定时使用 clearTimeout:
const timer = setTimeout(() => {}, 1000);
clearTimeout(timer); // 取消未执行的定时
使用 setInterval 实现循环定时
setInterval 会以固定间隔重复执行函数,间隔单位为毫秒:

setInterval(() => {
console.log('每隔1秒执行');
}, 1000);
清除循环定时使用 clearInterval:
const interval = setInterval(() => {}, 1000);
clearInterval(interval); // 停止定时循环
使用 requestAnimationFrame 实现动画定时
适用于需要与屏幕刷新率同步的动画场景(通常60fps):

function animate() {
console.log('动画帧执行');
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
停止动画循环需保存返回值:
let animationId;
function animate() {
animationId = requestAnimationFrame(animate);
}
animationId = requestAnimationFrame(animate);
cancelAnimationFrame(animationId);
使用 async/await 实现可暂停定时
通过 Promise 封装实现可控延迟:
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function run() {
await delay(1000);
console.log('1秒后执行');
}
使用 AbortController 控制定时(现代浏览器)
结合 AbortSignal 实现更精细的控制:
const controller = new AbortController();
setTimeout(() => {
console.log('可中止的定时');
}, 1000, { signal: controller.signal });
controller.abort(); // 中止尚未执行的定时
注意事项
定时器的时间参数是最小延迟,实际执行时间可能因主线程繁忙而延后 循环定时器需确保每次执行时间不超过间隔周期,否则会导致执行堆积 页面不可见时(如切换标签页),浏览器可能会降低定时器频率以节省资源






