防抖
function debounce(fn, delay) {
// 声明变量timer
let timer = null
return function () {
// 多次触发时,清除前一个定时器,保证只执行最后一个定时器
if (timer) {
clearTimeout(timer)
}
// 设置定时器
timer = setTimeout(() => {
// 将this指向从window修改为调用函数,同时将函数所有形参返还出去
fn.apply(this, arguments)
}, delay)
}
}
节流
function throttle(fn, delay) {
// 声明变量timer用作开关
let timer = null
// return出一个函数用以写代码,增强扩展性
return function () {
// 如果timer正在定时器中,return函数,使定时器走完再执行下一次定时器
if (timer) {
return
}
// 设置定时器
timer = setTimeout(function () {
// 执行fn函数并重制timer值
fn()
timer = null
}, delay)
}
}