论javascript防抖与节流

防抖和节流函数都是用来优化 JavaScript 函数的执行频率的方法。它们在处理一些高频触发的事件或者函数调用时非常有用。

防抖函数的作用是,当一个事件多次触发时,只执行最后一次触发的事件。这意味着只有在最后一次触发后等待一段时间后,函数才会被执行。这对于一些需要等待用户停止操作后才执行的函数非常有用,比如实时搜索框。

下面是一个简单的防抖函数示例:

// 防抖函数
function debounce(func, delay) {
  let timer;

  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  };
}

// 使用防抖函数
const searchInput = document.getElementById('search-input');
searchInput.addEventListener('input', debounce(handleSearch, 500));

function handleSearch() {
  // 执行搜索逻辑
}

在上述示例中,防抖函数 `debounce` 接收一个函数 `func` 和一个延迟时间 `delay`。当事件被触发时,防抖函数会通过 `setTimeout` 设置一个定时器,在延迟时间后执行传入的函数 `func`。

**节流函数**的作用是,无论一个事件触发多少次,在规定的时间间隔内只执行一次事件。节流函数适用于一些需要在规定时间间隔内稀释事件执行的情况,比如鼠标移动事件。

以下是一个简单的节流函数示例:

// 节流函数
function throttle(func, limit) {
  let timer;
  let inThrottle = false;

  return function() {
    if (!inThrottle) {
      func.apply(this, arguments);
      inThrottle = true;
      clearTimeout(timer);
      
      timer = setTimeout(() => {
        inThrottle = false;
      }, limit);
    }
  };
}

// 使用节流函数
window.addEventListener('scroll', throttle(handleScroll, 1000));

function handleScroll() {
  // 执行滚动逻辑
}

在上面的示例中,节流函数 `throttle` 接收一个函数 `func` 和一个时间限制 `limit`。当事件被触发时,节流函数会检查是否在限定时间间隔内已经触发过一次事件,如果没有,则执行传入的函数 `func`,并设置一个定时器,定时器在限定时间后将 `inThrottle` 标记为 `false`,以便下次事件触发时再次执行函数。

总结一下,防抖函数适用于需要等待用户停止操作后才执行的场景,而节流函数适用于在一段时间内稀释事件执行的场景。使用防抖和节流函数能够有效地减少函数的执行次数,提高性能和响应速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript中的防抖节流是为了控制函数的执行频率,以提高性能和优化用户体验。 防抖(debounce)是指在一定的时间间隔内,只执行最后一次操作。引用提供了一个自定义的防抖函数示例。该函数接受两个参数:待执行的函数和延迟时间。在函数调用时,如果在延迟时间内再次触发了函数调用,则会清除之前的定时器,重新设置一个新的定时器,以延迟函数的执行。 节流(throttle)是指在一定的时间间隔内,限制函数的执行频率。引用和提供了两个不同的节流函数示例。这些节流函数都可以指定一个时间间隔,只有在这个时间间隔内函数没有被执行过才能继续执行。其中,引用实现了一个基于定时器的节流函数,而引用则是一个基础版的节流函数,使用了时间戳来判断是否达到执行条件。 需要注意的是,防抖节流可以根据具体的需求和场景来选择使用,以达到更好的效果。防抖适用于需要等待用户停止操作后才执行的场景,而节流适用于需要限制函数执行频率的场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [JavaScript 防抖节流的实现](https://blog.csdn.net/weixin_43853746/article/details/122654312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【JavaScript防抖(debounce)、节流(throttling)](https://blog.csdn.net/qq_46658751/article/details/123386755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值