debounce and throtlle

debounce

javascript 复制代码
      // 核心:单位时间内触发>1 则只执行最后一次。
      //excutioner 可以认为是执行器。执行器存在则清空,再赋值新的执行器。
      function debounce(fn, delay = 500) {
        let excutioner = null;
        return function () {
          let context = this;
          let args = arguments;

          if (excutioner) {
            clearTimeout(excutioner);
          }
          excutioner = setTimeout(() => {
            fn.apply(context, args);
          }, delay);

          console.log("excutioner", excutioner);
        };
      }

      const clickFun = params => {
        console.log("this is click Fun", params);
      };

      const butt = document.getElementById("clickBut");
      //传参的2种方式
      butt.addEventListener(
        "click",
        debounce(() => clickFun(100), 1000)
      );
      // butt.addEventListener("click", debounce(clickFun, 1000).bind(this, 100));

throtlle

javascript 复制代码
      // 单位时间内触发>1次 只执行第一次
      function throttle(fn, delay = 1000) {
        let excutioner = null;
        return function () {
          const context = this;
          const args = arguments;
          if (!excutioner) {
            excutioner = setTimeout(() => {
              fn.apply(context, args);
              excutioner = null;
            }, deplay);
          }
        };
      }
      const butt2 = document.getElementById("clickBut2");
      //传参
      butt.addEventListener(
        "click",
        throttle(() => clickFun(100), 1000)
      );

注: //在 JavaScript 中,arguments 是一个类数组对象,它表示传递给一个函数的参数集合。通过使用 arguments

对象,你可以在函数内部访问到传递给该函数的所有参数,即使你在函数声明中没有明确指定这些参数。

相关推荐
持久的棒棒君1 小时前
npm安装electron下载太慢,导致报错
前端·electron·npm
crary,记忆3 小时前
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
前端·webpack·angular·angular.js
门前云梦4 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
漂流瓶jz4 小时前
让数据"流动"起来!Node.js实现流式渲染/流式传输与背后的HTTP原理
前端·javascript·node.js
SamHou04 小时前
手把手 CSS 盒子模型——从零开始的奶奶级 Web 开发教程2
前端·css·web
我不吃饼干4 小时前
从 Vue3 源码中了解你所不知道的 never
前端·typescript
开航母的李大5 小时前
【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解
前端·redis·nginx·缓存·微服务·kafka
Bruk.Liu5 小时前
《Minio 分片上传实现(基于Spring Boot)》
前端·spring boot·minio
sjtu_cjs5 小时前
Tensorrt python api 10.11.0笔记
开发语言·笔记·python
哆啦A梦的口袋呀5 小时前
深入理解系统:UML类图
开发语言·python·uml