JavaScript 函数防抖的实现

 前言

在 JavaScript 开发中,函数防抖是一种常用的技术,它可以有效地限制函数的执行频率,避免在频繁触发的情况下浪费资源。本文将介绍函数防抖的概念、原理以及如何实现与应用。

1 介绍函数防抖的概念和作用

在 JavaScript 中,函数防抖的概念是指通过延迟函数的执行,在一段时间内只执行一次函数。函数防抖主要用于解决频繁触发的事件,如窗口调整、搜索框输入等。它可以有效地减少函数执行的次数,减轻浏览器负担,提升用户体验。

2 函数防抖的原理

防抖的核心就是利用定时器 (setTimeout) 来实现,对应的方法延迟执行,如果该方法在延迟时间以内,又再次触发,将上一次的执行函数清除

举个栗子:王者荣耀回城,只要被打断就需要重新来

 3 在项目中对防抖进行封装使用

/**
 * @param {Function} func
 * @param {number} wait
 * @param {boolean} immediate
 * @return {*}
 */
export function debounce(func, wait, immediate) {
  let timeout, args, context, timestamp, result;

  const later = function() {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp;

    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
      timeout = setTimeout(later, wait - last);
    } else {
      timeout = null;
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
      if (!immediate) {
        result = func.apply(context, args);
        if (!timeout) context = args = null;
      }
    }
  };

  return function(...args) {
    context = this;
    timestamp = +new Date();
    const callNow = immediate && !timeout;
    // 如果延时不存在,重新设定延时
    if (!timeout) timeout = setTimeout(later, wait);
    if (callNow) {
      result = func.apply(context, args);
      context = args = null;
    }

    return result;
  };
}

这段代码定义了一个 debounce 函数,用于函数防抖。

该函数的功能是将传入的函数进行防抖处理,避免频繁触发。在设定的时间间隔内,如果函数被多次触发,则会重新计时,直到超过设定的时间间隔后才执行最后一次触发的函数。如果设置 immediate 为 true,则在首次触发时立即执行函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值