setTimeout执行一次延迟任务,setInterval按固定间隔重复执行;前者适用于防抖、延迟提示,后者用于轮询、倒计时;两者均需手动清除定时器ID以防内存泄漏,且精度受JS单线程限制。
在 JavaScript 中,setTimeout 和 setInterval 都是用来延迟或重复执行代码的定时器函数,但它们的核心行为和适用场景完全不同。
setTimeout 用于在指定的毫秒数后,执行一次回调函数。它适合“等一会儿再做某事”的场景,比如延迟提示、防抖、页面加载后初始化等。
setTimeout(callback, delay, ...args)
delay 是毫秒数(如 1000 表示 1 秒),最小值通常为 4ms(浏览器限制)clearTimeout(id)
setInterval 会每隔指定毫秒数就调用一次回调函数,直到被手动清除。适用于轮询、倒计时显示、心跳检测等周期性任务。
setInterval(callback, interval, ...args)
clearInterval(id) 主动停止,否则会持续运行,造成内存或性能问题
最本质的区别在于执行次数和生命周期管理:
setTimeout(() => { doWork(); setTimeout(arguments.callee, 1000); }, 1000))写定时器时记住这几个要点:
setTimeout 递归代替 setInterval,控制更灵活、不易失控requestAnimationFrame 做动画类更新console.time() / console.timeEnd() 测量回调实际耗时,判断是否影响定时精度