2026-10-22 16:22:29
JavaScript 定时器是控制代码执行时间的重要工具,主要用于延迟执行或周期性执行任务。以下是详细的使用方法和注意事项:
一、核心方法setTimeout用于单次延迟执行,语法为:
setTimeout(function, delayInMilliseconds);示例:5秒后打印消息setTimeout(() => console.log("5秒后执行"), 5000);
setInterval用于周期性执行,语法为:
setInterval(function, intervalInMilliseconds);示例:每2秒重复打印setInterval(() => console.log("每2秒重复执行"), 2000);
通过返回的ID清除定时器,避免内存泄漏:
const timerId = setTimeout(() => {}, 1000);clearTimeout(timerId); // 清除setTimeoutconst intervalId = setInterval(() => {}, 1000);clearInterval(intervalId); // 清除setInterval三、最佳实践存储定时器ID务必将定时器ID赋值给变量,以便后续清除:
const myTimer = setInterval(() => {}, 1000);// 需要时清除clearInterval(myTimer);避免阻塞主线程定时器回调中避免执行耗时操作(如复杂计算、同步IO),否则会导致页面卡顿。
谨慎使用周期性定时器
确保在不需要时(如组件卸载)清除setInterval。
对于动画或高频任务,优先考虑requestAnimationFrame。
内存管理未清除的定时器可能导致内存泄漏,尤其在单页应用(SPA)中。
递归setTimeout实现周期性任务比setInterval更灵活,可动态调整间隔:
function repeat() { console.log("递归执行"); setTimeout(repeat, 1000);}setTimeout(repeat, 1000);取消延迟执行
const timer = setTimeout(() => {}, 1000);// 在条件满足时取消if (someCondition) clearTimeout(timer);通过合理使用定时器,可以优化用户体验(如延迟加载、轮询检查),但需注意其潜在的性能影响。