/** * @param {Function} fn 需要执行的方法,因this指向问题,建议不使用箭头函数, * @param {Number} delay 间隔时间,默认值100 * @param {Boolean} promptly 是否立即执行,默认false * **/ export const debounce = (fn, delay = 100, promptly) => { let timer = null return function (...args) { // 立即执行 if (promptly) { // 当timer为null时执行 if (!timer) fn.apply(this, args) if (timer) { clearTimeout(timer) } timer = setTimeout(() => { timer = null }, delay) } else { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { fn.apply(this, args) }, delay) } } } /** * @param {Function} fn 需要执行的方法,因this指向问题,建议不使用箭头函数, * @param {Number} delay 间隔时间,默认值100 * **/ const throttle = (fn, delay = 100) => { let valid = true return function (...args) { if (!valid) { return } valid = false fn.apply(this, args) setTimeout(() => { valid = true }, delay) } }