一个最基本的防抖函数实现
// 什么是防抖函数
// 在某个时间段内,只执行最后一次触发的函数调用
// 首先定义一个函数 接收两个参数 一个为时间,一个为被防抖的函数
function debounce(timeout, fn) {
// 定义一个变量保存定时器
let _time = null
// 设置闭包
return function () {
// 每次触发时清除定时器
clearTimeout(_time)
// 设置定时器
_time = setTimeout(() => {
// 执行被防抖的函数
fn()
}, timeout)
}
}
当然 相对应有防抖函数就会有节流函数
// 什么是节流函数
// 让一个函数无法在短时间内连续调用,只有当上一次函数执行后过了规定的时间间隔,才能进行下一次该函数的调用。
// 封装一个节流函数
function throttling(timeout, fn) {
// 设置一个空变量
let _playing = null
// 设置闭包
return function () {
// 接收实参
let _arg = arguments
// 判断是否在执行
if (_playing) {
// 如果正在执行,则不执行
return
}
// 设置正在执行
_playing = true
// 设置定时器
setTimeout(() => {
// 执行函数
fn.apply(this, _arg)
// 执行完毕,设置未执行
_playing = false
}, timeout)
}
}