【八股系列】防抖节流函数原理、区别以及应用?

🎉 博客主页:【剑九 六千里-CSDN博客
🎨 上一篇文章:【vue-router的原理是什么?
🎠 系列专栏:【面试题-八股系列
💖 感谢大家点赞👍收藏⭐评论✍

在这里插入图片描述

在这里插入图片描述

1. 防抖

1.1. 原理

防抖函数(Debounce)的原理是指在事件被触发后,在指定的时间段内没有再次被触发,才会执行回调函数。如果在指定的时间段内再次被触发,则重新开始计时。

1.2. 使用场景

防抖函数的应用场景包括

  • 输入框搜索:在用户输入时,防抖函数可以延迟执行搜索请求,直到用户停止输入一段时间后再执行搜索。
  • 窗口大小调整:在窗口大小调整时,防抖函数可以延迟执行重新计算布局或渲染的操作,直到用户停止调整窗口大小一段时间后再执行。
  • 按钮点击:在按钮点击时,防抖函数可以延迟执行点击事件的处理函数,直到用户停止点击一段时间后再执行。
// Debounce function
function debounce(func, delay) {
  let debounceTimer;
  return function () {
    const context = this;
    const args = arguments;
    clearTimeout(debounceTimer);
    debounceTimer = setTimeout(() => func.apply(context, args), delay);
  };
}

2. 节流

2.1. 原理

节流函数(Throttle)的原理是指在事件被触发后,在指定的时间段内只执行一次回调函数。如果在指定的时间段内再次被触发,则忽略该次触发。

2.2. 使用场景

节流函数的应用场景包括

  • 滚动加载:在滚动页面时,节流函数可以延迟执行加载更多数据的操作,直到用户停止滚动一段时间后再执行。
  • 鼠标移动:在鼠标移动时,节流函数可以延迟执行处理鼠标移动事件的操作,直到用户停止移动一段时间后再执行。
  • 窗口大小调整:在窗口大小调整时,节流函数可以延迟执行重新计算布局或渲染的操作,直到用户停止调整窗口大小一段时间后再执行。
// Throttle function
function throttle(func, limit) {
  let inThrottle;
  return function () {
    const context = this;
    const args = arguments;
    if (!inThrottle) {
      func.apply(context, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}

3. 测试用例

// Example usage
const input = document.querySelector('input');
const div = document.querySelector('div');

// Debounce example
input.addEventListener('input', debounce(function () {
  console.log('Debounced input event');
}, 300));

// Throttle example
div.addEventListener('scroll', throttle(function () {
  console.log('Throttled scroll event');
}, 1000));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

剑九_六千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值