- 防抖
定义: 在定义的时间内只执行一次, 且延迟执行
例如: 定义时间2s, 在10s内连续一直点击, 则在第12秒执行函数
拓展: 首次正常执行, 后续延迟执行
下例: 点击事件, 首次生效, 后续点击在1秒内最后一次点击生效
/*代码解释:注册 debounce 函数, 定义 t 变量;首次点击时, 赋值定时器的返回值t;2s内再次点击时, 清除上一次定时器的执行函数, 并且再次注册新的定时器后续2s内点击依次清除前一次的执行, 只执行最后一次点击的函数, 从而实现延迟2s的效果*/var debounce = function(func, wait) {var t;return function() {var nfunc = () => func(...arguments);t ? clearTimeout(t) : nfunc(); // 拓展: 首次执行 nfunc();t = setTimeout(t ? nfunc : () => 0, wait);}}var click1 = debounce(function(e, v) {console.log('values: ', e, v)}, 1000)
- 节流
定义: 定义一个时间, 连续触发事件只能在定义的时间内执行一次
例如: 定义时间2s, 在10s内连续一直点击, 则实际触发5次
/*代码解释:注册 throttle 函数, 定义 t 变量;首次点击执行定时器, 进入计时, 2s后执行func函数;后续2s内的多次点击均被if条件判断为false, 取消函数执行;2s后执行func函数, t设置null, 再次点击进入新的定时, 从而实现2s内多次触发执行一次的效果*/const throttle = function(func, wait){var t;return function(){if(t) return;t = setTimeout(()=>{func(...arguments);t = null;}, wait)}}var click2 = throttle(function(e, v) {console.log('values: ', e, v)}, 2000)
