当前位置:首页 > 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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…