前端面试高频算法———防抖和节流

在前端的一些面试题中,经常会出现,hr让你手写防抖和节流算法。本文阅读仅需5分钟。

先看看基本概念:

防抖:限制函数执行次数,将多次触发变为一次触发(仅仅执行最后一次该函数的触发)

节流:限制高频执行函数的执行次数,在一定时间间隔内,将函数的触发次数降低。比如5秒内需要执行某函数50次,我可以使用节流,将函数执行次数降到5次。这样可以提高应用的性能.

防抖和节流的相同与不同之处:

相同点:防抖和节流都是减少函数的执行次数,为了提高应用的性能

不同点:防抖只是执行最后一次函数的调用。节流是减少调用次数,最后节流要调用的函数的次数往往不止一次

节流和防抖的算法,都使用了闭包思想。关于“闭包”可以看我的这篇博客闭包初学总结_m0_53498202的博客-CSDN博客

手写防抖函数:

  <input type="text" />
    <script>
      let inp = document.querySelector("input");
      inp.oninput = debounce(function () {
        console.log("hello,debounce");
        console.log(this.value);
      }, 1000);

      function debounce(fn, delay) {
        let t = null;
        return function () {
          if (t !== null) {
            clearTimeout(t);
          }  
          t = setTimeout(() => {
            
            fn.call(this); //现在的this才指向input
          }, delay);
        };
      }
    </script>

手写节流函数:

  <script>
  
      window.onscroll = throttle(function () {
        console.log("我是节流函数" + this);
      }, 500);

      //
      function throttle(fn, delay) {
        let flag = true;
        return function () {
          if (flag) {
            setTimeout(() => {
              fn.call(this);
              console.log("scroll");
              flag = true;  
            }, delay);
          }
          console.log(22220);
        };
      }
    </script>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值