函数节流与函数防抖

防抖:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
节流:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率

  • html
<body>
  <button id="debounce">防抖</button>
  <button id="throttle">节流</button>
  <script src="./index.js"></script>
</body>
  • js
// 高频率执行函数
function highFrequency(text) {
  console.log(text);
}

// 防抖
document.querySelector("#debounce").onclick = debounce(highFrequency, "函数防抖");
// 对高频率执行函数进行防抖处理
function debounce(fn, ...args) {
  let clock = null;
  return function() {
    if (clock) {
      clearTimeout(clock);
    }
    clock = setTimeout(function() {
      fn(...args);
    }, 1000);
  };
}

// 节流
document.querySelector("#throttle").onclick = throttle(highFrequency, "函数节流");
// 对高频率执行函数进行节流处理
function throttle(fn, ...args) {
  let canRun = true;
  return function() {
    if (!canRun) {
      return;
    }
    canRun = false;
    setTimeout(function() {
      fn(...args);
      canRun = true;
    }, 1000);
  };
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是函数节流与函数防抖? 举个例子,我们知道目前的一种说法是当 1 秒内连续播放 24 张以上的图片时,在人眼的...
    李轻舟阅读 5,065评论 0 11
  • 概念 原文地址 函数防抖(debounce) 当调用动作过n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则...
    你在我记忆里阅读 2,713评论 0 0
  • 我们在一个项目中按钮连续多次点击,会造成一些问题,比如连点按钮会造成多次push页面,或者造成多次网络请求。那么就...
    Da_Yao阅读 1,001评论 0 0
  • 函数节流 节流就是, 不管怎么触发,都是按照指定的间隔来执行。应用场景:1、监听页面滚动,因为页面滚动是一个高频触...
    LeeYaMaster阅读 2,806评论 0 0
  • 爱上一个不该爱的人,到底是谁的错,是你?还是……我不怪你,因为我觉得一切都是值得的,既然改变不了你,我就是改变我自己……
    薄荷味的女人阅读 1,157评论 0 0