什么是防抖?什么是节流?
防抖:用户触发高频事件(比如说点击事件)后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间,n秒后再执行。总之,就是等待用户触发完事件n秒内不再触发事件,再执行函数。
节流:用户触发高频事件(比如说点击事件)后n秒内函数只会执行一次。也就是说,不论用户在n秒内触发多少次事件,最终函数都会在n秒后执行一次。
防抖和节流的应用场景
防抖:
- 登录、发短信等按钮,避免发送多次请求
- 文本编辑器的自动保存
- input输入框,每隔特定时间发送请求(输入搜索)或者展开下拉列表(节流也可以)
节流:
- scroll滚动事件,每隔特定时间执行回调函数
- 浏览器窗口大小resize,避免次数过于频繁(防抖也可以)
手动实现防抖和节流
防抖
//debounce函数接收两个参数,第一个是要执行的函数,第二个是指定的时间间隔,也就是上述的n
function debounce(fn, delay) {
//定时器
let timer = null;
return function(...args)