节流防抖手写
RoleTang 9/12/2025
多次执行一个事件,只会执行最后一次(输入框联想搜索)
// 防抖,一定时间内再次触发则延后执行 const debounce = (fn, delay, immediate = false) => { let timer = null return (...args) => { if (timer) clearTimeout(timer) if (immediate && !timer) fn(...args) // 第一次立即执行 timer = setTimeout(() => { if (!immediate) fn(...args) // 延迟执行 timer = null }, delay) } }手写节流
多次执行一个事件,在一定的时间内只会执行一次
(页面的点击,scroll,浏览器缩放操作)
// 节流,一定时间内只触发一次 const throttle = (fn, delay, immediate = true) => { let timer = null return (...args) => { if (!timer) { if (immediate) fn(...args) // 第一次立即执行 timer = setTimeout(() => { if (!immediate) fn(...args) // 延迟执行 timer = null }, delay) } } }