前端面试题 - -什么是节流和防抖?

什么是防抖和节流?- - - 前端面试题

在这里插入图片描述

1.防抖:

就是指连续触发事件但是在设定一段时间内中只执行最后一次
例如
设定1000毫秒执行,当你触发事件了,他会1000毫秒后执行,但是在还剩500毫秒的时候你又触发了事件,那就会重新开始1000毫秒之后再执行

  • 记忆核心:从新开始
1.1、防抖应用场景:
  • 搜索框搜索输入
    这个是比较典型的案例。在我们输入搜索框的时候,我们不能每次进行输入的时候都要去发送请求,再返回我们数据,会非常的繁琐,那我们这可以设定一个时间,在我们多少秒之后呢再发送请求,所以呢频次不要太高
  • 文本编辑器实时保存
    这个也是没有必要每次输入都要保存,而是设定一个时间,多少时间之后呢再自动保存
1.2、防抖代码实现思路?

回答:利用定时器定时器基本靠谱了

let timerId=null
// 首先把定时器声明为null
document.querySelector('.ipt').onKeyup=function(){
//onkeyup键盘抬起事件
//防抖
if(timerId !==null){
clearTimeout(timerId)
}
//键盘抬起的时候我们先来判断是不是null,如果不是null我就清除定时器
//首次执行这个条件是不满足的,所以不清除定时器,执行下面代码
timerId =setTimeout(()=>{
	console.log('我是防抖')
},1000)
//定时器一旦执行,就会返回给我们一个数字,所以timerId就有数字了
//1.如果此时你又做了一次键盘的抬起事件,
//2.因为定时器timerId不是null,那么就先清除定时器
//3.清除完毕又执行这段代码
}

2.节流:

就是指连续触发事件但是在设定的一顿时间内只执行一次函数。
例如
设定1000毫秒执行,那你在1000毫秒触发再多次,也只在1000毫秒后执行一次
记忆方法

  • 记忆核心:不要打断我
2.1、节流应用场景:
  • 高频事件 例如 快速点击、鼠标滑动、resize事件、scroll事件
  • 下拉加载
  • 视频播放记录时间等
2.2、节流代码实现思路?

回答:利用定时器定时器基本靠谱了

let timerId=null
// 首先把定时器声明为null
document.querySelector('.ipt').onmouseover=function(){
//onmouseover鼠标经过事件
//节流
if(timerId !==null){ 
return
}
//首次执行timerId为空,这个条件是不满足的
//所以不执行return,执行下面代码
timerId =setTimeout(()=>{
  console.log('我是节流')
  timerId=null
},100)
//定时器一旦执行,就会返回给我们一个数字,所以timerId就有数字了
//但是这段代码是在100毫秒之后才去执行代码块
//如果是在100毫秒之内再次做了一个鼠标事件
//我再次触发事件,timerId已经做了变化
//if条件就满足了,return结束我们这个函数,
}

所以我们会发现节流就是不要打断我,在我执行期间,你如果多次触发,他都会return返回出我这个函数,所以不糊影响下面代码块的执行,除非等我代码执行完了,在等于null,我才执行新的一轮开始

总结

  1. 防抖:单位时间内,频繁触发事件,只执行最后一次
    • 典型场景:搜索框搜索输入
    • 代码思路是利用定时器,每次触发先清掉以前的定时器(重新开始)
  2. 节流:单位时间内:频繁触发事件,只执行一次
    • 典型场景:高频事件 快速点击、鼠标滑动、resize、srcoll事件
    • 代码思路也是利用定时器,等定时器执行完毕,才开始定时器(不要打断)

在这里插入图片描述

其实,我开发一般用lodash库,利用里面的debounce(防抖)和throttle(节流)来做的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端初见

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

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

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

打赏作者

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

抵扣说明:

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

余额充值