防抖
定义:
防抖函数 debounce 指的是函数在特定的时间,无论触发了多少次回调,都只执行最后一次。
假如我们设置了一个等待时间 3 秒的函数,在这 3 秒内如果遇到函数调用请求就重新计时 3 秒,
直至新的 3 秒内没有函数调用请求,此时执行函数,不然就以此类推重新计时。 附上代码如下:
function debounce(fn, time= 50, immediate ) {
let timer = null
return function(...args) {
if (timer) clearTimeout(timer)
if (immediate && !timer) {
fn.apply(this, args)
}
timer = setTimeout(() => {
fn.apply(this, args)
}, time)
}
}
节流
定义:
函数节流指的是某个函数在一定时间间隔内(例如 3 秒)只执行一次,在这 3 秒内 无视后来产生
的函数调用请求,也不会延长时间间隔。3 秒间隔结束后第一次遇到新的函数调用会触发执行,然后
在这新的 3 秒内依旧无视后来产生的函数调用请求,以此类推。 附上代码如下:
const throttle = (fn, time = 50) => {
let previous = 0
return function(...args) {
let now = +new Date()
if (now - previous > time) {
previous = now
fn.apply(this, args)
}
}
}