setTimeout 只执行一次,setInterval 周期性重复执行;前者用于延迟操作,后者用于轮询或倒计时,均需用 clearTimeout/clearInterval 手动清除以防内存泄漏。

javaScript 中最常用的定时器就是 setTimeout 和 setInterval,它们都属于 浏览器 window 对象 的方法,用于控制代码在指定时间后执行。
setTimeout:只执行一次的延迟操作
它会在设定的毫秒数之后,执行一次指定的函数或代码段。执行完就自动结束,不会重复。
- 适合做“等一会儿再干某事”,比如页面加载后延迟显示提示、防抖逻辑、动画启动延时
- 可以传入函数引用或箭头函数,支持直接传参(现代 浏览器):
setTimeout(greet, 1000, 'Alice') - 必须用
clearTimeout(id)才能提前取消,否则到点必执行
setInterval:周期性重复执行
它会按固定间隔(毫秒)反复调用函数,像心跳一样持续运行,直到被手动清除或页面关闭。
- 适合轮询数据、倒计时、实时刷新状态、简易动画帧控制
- 同样支持函数引用和参数传递:
setInterval(updateClock, 1000) - 务必配合
clearInterval(id)使用,否则容易造成内存泄漏或重复请求
关键 区别 一句话总结
setTimeout 是“等一次就完事”,setInterval 是“每隔一阵就来一遍”——前者靠时间点触发,后者靠时间间隔驱动。
立即学习“Java 免费学习笔记(深入)”;
小提醒:别踩这些坑
- 传 字符串 形式的代码(如
setTimeout('alert(1)', 1000))已不推荐,存在安全与性能问题,优先用函数 - setInterval 不保证严格准时,如果前一次执行耗时过长,下一次会紧接着执行(不会累积延迟)
- 在单页应用中,离开页面前记得清理定时器,避免后台无效运行