### 防抖:对于短时间内连续触发的事件,比如window.scroll事件,防抖就是让这个连续性的事件在指定的时间内触发,降低触发频率
```
1. 案例:窗口事件,以及滚动事件等只需要判断最后一次结果的事件
```
function test(){
let body \= document.body.scrollTop
let documentElement \= document.documentElement.scrollTop
console.log('滚动条滚动的位置:' + body, documentElement)
}
function debounce(fn, delay) {
let timer \= null
return function() {
if (timer) {
clearTimeout(timer)
}
timer \= setTimeout(fn, delay)
}
}
window.onscroll \= debounce(test, 500)
### 节流:节流和防抖非常像,区别在于防抖如果一直在快速触发,则函数不会执行,而节流则一定会在一定时间内执行一次,不管触发得频繁不频繁
1. 案例:input输入值时动态查询服务端数据,即使快速搜索时也会在设置的时间段内执行一次函数
```
const input \= document.querySelector('#input')
input.oninput \= throttle(function() {
console.log(input.value)
}, 500)
function throttle(fn, delay) {
let valid \= true
return function() {
if (!valid) return
valid \= false
setTimeout(() \=> {
fn()
valid \= true
}, delay)
}
}
```
### 防抖与节流:核心是可以使用setTimout函数来定时执行函数,在函数未执行前清除了其定时器则不会执行