函数防抖与节流

一、函数防抖

1.原理

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

2.适用场景

(1)搜索框搜索输入。只需用户最后一次输入完,再发送请求;
(2)用户名、手机号、邮箱输入验证;
(3)浏览器窗口大小改变后,只需窗口调整完后,再执行 resize 事件中的代码,防止重复渲染


//防抖函数
function debounce(fn,wait) {
   let timer = null
  return function () {
     let arg = arguments;
     let _this = this;
     if (timer) {
          clearTimeout(timer);
          timer = null;
      }
     let timer = setTimeout(()=>{
        fn.apply(_this,arg);
     },wait) 
  }
}
 
let fn = ()=>{
  console.log('触发函数')
}

 
setInterval(debounce(fn,1000),500);

二、函数节流

1.原理

每隔一段时间,只执行一次函数。

2.适用场景

(1) 懒加载、滚动加载、加载更多或监听滚动条位置;
(2)百度搜索框,搜索联想功能;
(3) 防止高频点击提交,防止表单重复提交;

//节流函数
function throttle(fn,gaptime){
   let lasttime = null;
   return function(){
      let nowtime = new Date();
      if(nowtime - lasttime>gaptime||!lasttime){
          fn();
          lasttime = nowtime
      }
   }
}
let fn = ()=>{
  console.log('触发函数')
}
 
setInterval(throttle(fn,1000),500);

三、防抖与节流的比较

1、相同点:
(1) 都可以通过使用 setTimeout 实现。
(2)目的都是,降低回调执行频率,节省计算资源。
2、不同点:
(1) 函数防抖,在一段连续操作结束后,处理回调,关注一定时间连续触发的事件只在最后执行一次。
(2)函数节流,在一段连续操作中,每一段时间只执行一次,侧重于一段时间内只执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值