防抖和节流的简单理解

本文深入探讨了JavaScript中的防抖(debounce)和节流(throttle)技术,这两种技术常用于优化性能,避免频繁函数调用。防抖确保在最后一次操作后才执行函数,而节流则保证在规定时间内至少执行一次。举例来说,防抖常用于登录时的发送验证码,避免连续点击;节流则应用于滚动事件监听,保证在滚动停止后执行一次处理函数。通过引入lodash库,可以轻松实现防抖和节流功能。
摘要由CSDN通过智能技术生成
一、防抖:在规定的时间第n秒后才会执行回调,如果在n秒内又被触发,则会进行重置(重新计时);

应用场景:

  1. 登录、发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖;
  2. 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖
  3. 文本编辑器实时保存,当无任何更改操作一秒后进行保存
//封装防抖函数
      function debounce(fn, delay = 1000) {
          // 定义一个变量
          let timer = null;
          //返回一个新函数,就是在调用这个函数
          return function () {
              //清除上一个定时器
              clearTimeout(timer)
              //创建一个新的定时器
              timer = setTimeout(() => {
                  // 调用fn
                  fn.call(this)
              }, delay)
          }
      }

举个栗子:
在这里插入图片描述

二、节流:规定在一定的时间内,只能触发一次函数。如果在规定时间内触发多次函数,只有一次生效。

应用场景:

1.监听滚动事件,下拉加载更多事件;

//封装节流函数

	function throttle(fn,delay=1000) {
	     // 定义一个flag
	     let flag = true;
	     return function () { 
	         //第一次进来不会执行:flag为false直接return
	         if (!flag) return;
	         //第一次点击把flag赋值为false,继续向下执行
	         flag = false;
	         // 创建一个定时器
	         setTimeout(() => {
	             fn.call(this)
	             // 执行回调后,把flag重置为true;
	             flag = true;
	         }, delay)
	     }
	 }

举个栗子:
在这里插入图片描述

👁‍🗨总结:函数节流是不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而函数防抖只是在最后一次事件后才触发一次函数。

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

防抖和节流还可以通过引入第三方库lodash来实现

bootcdn引入lodash
在这里插入图片描述

防抖:

<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.core.js"></script>
//以上防抖代码可写成如下:
inp.addEventListener('input',  _.debounce(function () {
         console.log(inp.value)
}, 1200))

节流:

<script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.core.js"></script>
//以上防抖代码可写成如下:
inp.addEventListener('click',  _.throttle(function () {
         console.log('抢购')
}, 1200))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃葡萄不吐葡萄皮嘻嘻

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

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

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

打赏作者

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

抵扣说明:

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

余额充值