// 非立刻执行版 functiondebounce(func, wait) { let timeout returnfunction () { let context = this let args = arguments // 在wait 时间内,如果再次触发,那么清除之前的定时器,开启新的定时器 if (timeout) clearTimeout(timeout) timeout = setTimeout(() => { func.apply(context, args) }, wait) } }
// 立即执行版(同时结合了非立即执行版) functiondebounce(func, wait, immediate) { let timeout returnfunction () { let context = this let args = arguments // 在wait时间内再次执行,取消之前的定时器 if (timeout) clearTimeout(timeout)