在事件被触发n秒后再执行回调,若是在这n秒内又被触发,则从新计时。javascript
function debounce(func, delay) { let isCooldown = false; return function() { if (isCooldown) return; func.apply(this, arguments); isCooldown = true; setTimeout(() => isCooldown = false, delay); }; }
规定在一个单位时间内,只能触发一次函数。若是这个单位时间内触发屡次函数,只有一次生效。java
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者区别:浏览器
应用场景:app
参考文档:函数
装饰和转发,call/applypost