在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
function debounce(func, delay) { let isCooldown = false; return function() { if (isCooldown) return; func.apply(this, arguments); isCooldown = true; setTimeout(() => isCooldown = false, delay); }; }
规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
function throttle(func, delay) { let isThrottled = false, savedArgs, savedThis; function wrapper() { if (isThrottled) { // (2) savedArgs = arguments; savedThis = this; return; } func.apply(this, arguments); // (1) isThrottled = true; setTimeout(function() { isThrottled = false; // (3) if (savedArgs) { wrapper.apply(savedThis, savedArgs); savedArgs = savedThis = null; } }, delay); } return wrapper; }
2者区别:
应用场景:
参考文档:
原文:https://www.cnblogs.com/sese/p/11649135.html