当前位置:首页 > JavaScript

js实现定时

2026-01-31 18:00:50JavaScript

定时器基础实现

JavaScript 提供了两种主要的定时器方法:setTimeoutsetIntervalsetTimeout 用于在指定的时间后执行一次代码,而 setInterval 用于每隔指定的时间重复执行代码。

// setTimeout 示例:延迟 2 秒后执行
setTimeout(() => {
  console.log('延时 2 秒执行');
}, 2000);

// setInterval 示例:每隔 1 秒执行一次
const intervalId = setInterval(() => {
  console.log('每隔 1 秒执行');
}, 1000);

// 清除定时器
clearInterval(intervalId);

定时器的清除

为了避免内存泄漏或意外的重复执行,定时器需要被正确清除。setTimeout 返回一个定时器 ID,可以通过 clearTimeout 取消;setInterval 返回的 ID 则通过 clearInterval 取消。

js实现定时

const timeoutId = setTimeout(() => {
  console.log('这段代码不会执行');
}, 2000);

clearTimeout(timeoutId);

高级定时控制

使用递归的 setTimeout 可以替代 setInterval,实现更精确的定时控制。这种方式可以确保前一次执行完成后再开始下一次定时。

function repeatTask() {
  console.log('递归定时任务');
  setTimeout(repeatTask, 1000);
}

repeatTask();

定时器与异步结合

定时器常用于异步任务调度,例如延迟加载数据或实现轮询机制。以下是一个轮询 API 的示例:

js实现定时

function pollAPI() {
  fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => {
      console.log(data);
      setTimeout(pollAPI, 5000); // 5 秒后再次轮询
    })
    .catch(error => {
      console.error('轮询失败:', error);
      setTimeout(pollAPI, 10000); // 失败后 10 秒重试
    });
}

pollAPI();

性能优化注意事项

避免在短时间内创建大量定时器,可能导致性能问题。可以使用防抖(debounce)或节流(throttle)技术优化高频触发的定时任务。

function debounce(func, delay) {
  let timeoutId;
  return function() {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => func.apply(this, arguments), delay);
  };
}

const debouncedLog = debounce(() => console.log('防抖后的输出'), 300);
window.addEventListener('resize', debouncedLog);

定时器的替代方案

现代浏览器提供了 requestAnimationFrame,适合动画等需要与屏幕刷新率同步的场景。其执行频率通常为 60 FPS(约 16.7ms/帧)。

function animate() {
  console.log('动画帧');
  requestAnimationFrame(animate);
}

animate();

标签: js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…