当前位置:首页 > JavaScript

js节流防抖实现思路

2026-04-04 22:17:53JavaScript

节流(Throttle)的实现思路

节流的核心是限制函数在一定时间内只执行一次,常用于高频触发的事件(如滚动、窗口调整)。

时间戳版
通过比较当前时间与上次执行时间差,决定是否执行函数:

function throttle(fn, delay) {
  let last = 0;
  return function(...args) {
    const now = Date.now();
    if (now - last > delay) {
      fn.apply(this, args);
      last = now;
    }
  };
}

定时器版
利用定时器延迟执行,确保间隔时间内仅有一个定时器存在:

js节流防抖实现思路

function throttle(fn, delay) {
  let timer = null;
  return function(...args) {
    if (!timer) {
      timer = setTimeout(() => {
        fn.apply(this, args);
        timer = null;
      }, delay);
    }
  };
}

防抖(Debounce)的实现思路

防抖的核心是在事件触发后等待一定时间再执行,若期间重复触发则重新计时。

基础版
通过清除并重建定时器实现延迟执行:

js节流防抖实现思路

function debounce(fn, delay) {
  let timer = null;
  return function(...args) {
    clearTimeout(timer);
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

立即执行版
首次触发立即执行,后续触发需等待延迟:

function debounce(fn, delay, immediate) {
  let timer = null;
  return function(...args) {
    if (timer) clearTimeout(timer);
    if (immediate && !timer) {
      fn.apply(this, args);
    }
    timer = setTimeout(() => {
      timer = null;
      if (!immediate) fn.apply(this, args);
    }, delay);
  };
}

结合场景的选择

  • 节流适用场景
    需要均匀执行的情况,如滚动加载、鼠标移动跟踪。

  • 防抖适用场景
    需等待操作停止后执行的场景,如搜索输入联想、窗口大小调整。

注意事项

  • 使用apply确保函数上下文(this)和参数正确传递。
  • 清除定时器避免内存泄漏。
  • 结合需求选择时间戳或定时器实现节流。

标签: 防抖思路
分享给朋友:

相关文章

Vue实现思路

Vue实现思路

Vue 实现思路 Vue 是一个渐进式 JavaScript 框架,适用于构建用户界面。其核心思想是数据驱动和组件化开发。以下是 Vue 实现的主要思路和方法: 数据驱动与响应式 Vue 通过数据绑…

vue 多选实现思路

vue 多选实现思路

多选框组件实现 使用Vue内置的v-model指令绑定数组类型数据,当选中多个选项时,会自动将值添加到数组中 <template> <div> <label…

js 装饰器实现防抖

js 装饰器实现防抖

防抖装饰器的实现原理 防抖(Debounce)是一种常见的前端优化技术,用于限制函数在短时间内被频繁调用。装饰器(Decorator)是 JavaScript 的一种语法特性,可以方便地修改或增强函数…

js实现链表思路

js实现链表思路

实现链表的基本结构 链表由节点(Node)组成,每个节点包含两个部分: value:存储数据 next:指向下一个节点的引用(默认null) class Node { constru…

vue实现防抖节流

vue实现防抖节流

防抖(Debounce)实现 防抖的核心在于延迟执行,直到事件停止触发后一段时间才执行。适用于输入框搜索、窗口调整等场景。 在Vue中可以通过自定义指令或方法实现: 方法1:使用Lodash库的_…

php限时抢购实现思路

php限时抢购实现思路

限时抢购功能概述 限时抢购是电商常见的高并发场景,需解决库存超卖、系统性能、数据一致性等问题。PHP实现需结合数据库、缓存、队列等技术。 数据库设计 商品表需包含抢购相关字段: CREATE…