js节流与防抖

本文介绍了JavaScript中防抖(debounce)与节流(throttle)技术的实现方式及应用场景,通过手写函数与使用lodash库两种方法实现了点击事件的防抖与节流,帮助开发者减少不必要的函数调用,提高程序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    div{
      width: 400px;
      height: 400px;
      background-color:red;
    }
  </style>
</head>
<body>
  <div id="div1"></div>
  <!-- 防抖节流封装的js包 -->
  <script type="text/javascript" src="./lodash.js"></script>
  <script type="text/javascript">
    let div1=document.getElementById("div1")

   function func1 (argument) {
      console.log('aaa') 
    }

    // 使用lodash包实现的防抖和节流
    // 防抖:_.debounce(function(){需要设置防抖的函数},延迟时间)
    // div1.οnclick=_.debounce(func,1000)

    // 节流:_.throttle(function(){需要设置防抖的函数},延迟时间)
    // div1.οnclick=_.throttle(func,1000)


    // 手写防抖和节流
    // 防抖:
    function fangdou(func,timeout){
      let a;
      return function(){
        if(a)clearTimeout(a)
          a=setTimeout(()=>{
            func()
        },timeout)
      }
    }
     // div1.οnclick=fangdou(func1,1000)
  
    //  div1.onclick接收的是一个函数,然后回调这个函数,所以fangdou的返回值必须是一个函数
   

    // 节流
    function jieliu(func,timeout){
      let a=true;
      return function(){
        if(a){
          a=false
          setTimeout(()=>{
            a=true
            func()
          }, timeout)
        }
      }
    }
    div1.onclick=jieliu(func1,1000)
    /*
      节流和防抖的区别:
      1、防抖(debounce):触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间
      举例:就好像在百度搜索时,每次输入之后都有联想词弹出,这个控制联想词的方法就不可能是输入框内容一改变就触发的,他一定是当你结束输入一段时间之后才会触发。


      2.节流(thorttle):高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率
        举例:预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行。就好像你在淘宝抢购某一件限量热卖商品时,你不断点刷新点购买,可是总有一段时间你点上是没有效果,这里就用到了节流,就是怕点的太快导致系统出现bug。

      3、区别:防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。

      节流和防抖的主要应用场景:

      

     */
  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iku_ki

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

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

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

打赏作者

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

抵扣说明:

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

余额充值