觸發的事件以週期的形式去執行,而非實時。如滴水的水龍頭。javascript
function throttle (fn, delay) { // 利用閉包變量時效性 let timeout let arg return function () { arg = arguments if (!timeout) { timeout = setTimeout(() => { fn.apply(this, arg) timeout = null }, delay) } } } // demo /* var test = throttle(function (a) {console.log(a)}, 1000) test(1) // 不執行 test(2) // 不執行 test(3) => 3 test = null // 不須要時釋放內存 */
事件最後一次觸發的N毫秒後觸發,如電梯門。java
function debounce (fn, delay){ let timeout return function(){ const args = arguments clearTimeout(timeout) timeout = setTimeout(() => { fn.apply(this, args) }, delay) } } // 用法同throttle