在事件被觸發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