手写防抖、节流函数

本文深入探讨了JavaScript中两种重要的性能优化技术——防抖和节流。防抖技术确保在短时间内频繁触发同一事件时,只执行最后一次函数调用,而节流则限制了函数执行的频率,每隔一定时间执行一次。通过示例代码,展示了如何实现防抖和节流函数,并应用于窗口滚动事件监听,以减少不必要的计算和提高页面性能。
摘要由CSDN通过智能技术生成

防抖:短时间大量触发同一事件,只执行一次函数,实现延迟执行。

节流:节流即每隔一个时间间隔,执行一次任务(多次触发只执行一次)。

防抖:

// 防抖
function debounce(fn, delay = 300) {
  //默认300毫秒
  let timer;
  return function () {
    const args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(this, args); // 改变this指向为调用debounce所指的对象
    }, delay);
  };
}
 
window.addEventListener(
  "scroll",
  debounce(() => {
    console.log(111);
  }, 1000)

节流:


// 节流
// 设置一个标志
function throttle(fn, delay) {
  let flag = true;
  return () => {
    if (!flag) return;
    flag = false;
    timer = setTimeout(() => {
      fn();
      flag = true;
    }, delay);
  };
}
 
window.addEventListener(
  "scroll",
  throttle(() => {
    console.log(111);
  }, 1000)
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值