防抖 debounce
- 定义:函数被触发时,需要先延迟,在延迟的时间内,如果再次被触发,则取消之前的延迟,重新开始延迟。这样就能达到,只响应最后一次,其余的请求都过滤掉。某个函数在短时间内只执行最后一次。
function debounce(fn, delay, immedia = false) {
let timer = null
return () => {
if (timer) clearTimeout(timer)
// 首次立即执行
if (immedia && !timer) {
fn.call(this)
timer = setTimeout(() => {
timer = null
}, delay)
}
timer = setTimeout(() => {
fn.call(this)
timer = null
}, delay)
}
}
限流 throttle。
- 定义: 多次触发同一个函数,同一段时间内只执行一次
function throttle() {
let previous = 0
return () => {
const now = Date.now()
if (now - previous > delay) {
fn.call(this)
previous = Date.now()
}
}
}