防抖节流面试/笔试题整理
防抖
Q1: 为什么要防抖?/什么是防抖?/了解防抖吗?
防止事件重复触发
例如 :使用search搜索关键词,用户在不断输入值时,不需要每次输入都进行一次查询,可以等用户输入完再查询。
此时用防抖来节约请求资源。
Q2: 如何防抖?
需要在事件触发后中开启一个定时器。如果再次触发则把定时器设置为0,等定时器到以后再触发。
Q3:口述一个防抖函数?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text">
<script>
let input = document.querySelector("input");
let time = null;//time用来控制事件的触发
input.addEventListener('input',function(){
//防抖语句
if(time !== null){
// clearTimeout() 方法可取消由 setTimeout() 方法设置的定时操作。
// clearTimeout() 方法的参数必须是由 setTimeout() 返回的 ID 值。
clearTimeout(time);
}
time = setTimeout(() => {
console.log(this.value);//业务实现语句
//这里的this指向的是input
},500)
})
</script>
</body>
</html>
节流
Q1:为什么要节流?/什么是节流?/了解节流吗?
- 节流就是减少流量,将频繁触发的事件减少,并每隔一段时间执行
例如:监听滚动事件,比如是否滑到底部自动加载更多
Q2:如何节流?
- 当事件触发后即关上阀门,接下来触发都不生效。过一段时间后阀门才会开启。
Q3:口述一个节流函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
var flag = true;
window.addEventListener('scroll',function(){
if(flag){
setTimeout(()=>{
console.log(123);
flag = true;
},2000);
}
flag = false;
});
</script>
</body>
<style>
body{
height: 500vh;
}
</style>
</html>
防抖和节流的区别
- 防抖触发高频率事件时n秒后只会执行一次,如果n秒内再次触发,则会重新计算。高频事件触发,每次触发事件时设置一个延迟调用方法。
- 防抖是将多次执行变为最后一次执行,节流是将次执行变成每隔一段事件执行
参考博客:
- https://www.jianshu.com/p/159377741062
- https://blog.csdn.net/baidu_39009276/article/details/123798695
- https://blog.csdn.net/weixin_49592687/article/details/124287056
- https://blog.csdn.net/weixin_49592687/article/details/124356792?spm=1001.2014.3001.5502
- https://blog.csdn.net/weixin_67651040/article/details/123559510