防抖:指触发事件后的n秒内函数只执行一次,若在n秒内再次触发则重新计算时间。
// 防抖 debounce // 延后执行 function debounce(func, wait) { let timer; return function() { if (timer) clearTimeout(timer); timer = setTimeout(function() { func.apply(this); }, wait); } } // 立即执行 function debounce2(func, wait) { let timer; return function() { if (timer) clearTimeout(timer); let callnow = !timer; timer = setTimeout(function() { timer = null; }, wait); if (callnow) func.apply(this);// 第一次执行 } }
节流:连续发生的事件在n秒内只执行一次。
// 节流 throttle function throttle(func, wait) { let timer; return function() { if (!timer) { timer = setTimeout(() => { timer = null; func.apply(this); }, wait) } } }
应用场景:即时查询。