防抖和节流

防抖

防抖是函数在一段时间内只执行一次,如果再次调用则重新计时

实现

1
2
3
4
5
6
7
8
9
function debounce(fn, delay) {
let timeOut;
return function (...args) {
clearTimeout(timeOut);
timeOut = setTimeout(function() {
fn.apply(this, args)
}, delay)
}
}

节流

在一个单位时间内函数只能触发一次, 多次触发也只有一次生效

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function throttle(fn, delay) {
let later, timer
return function (...args) {
clearTimeout(timer)
const now = new Date().getTime()
if (later && now < later + delay) {
timer = setTimeout(function () {
later = now
fn.apply(this, args)
}, delay)
} else {
later = now
fn.apply(this, args)
}
}
}