// 函數防抖: 在事件被觸發 n 秒后再執行回調,如果在這 n 秒內事件又被觸發,則重新計時。// 函數節流: 規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位時間內某事件被觸發多次,只有一次能生效。// 函數防抖的實現
function debounce(fn, wait) {var timer = null;return function () {var context = this,args = arguments;// 如果此時存在定時器的話,則取消之前的定時器重新記時if (timer) {clearTimeout(timer);timer = null;}// 設置定時器,使事件間隔指定事件后執行timer = setTimeout(() => {fn.apply(context, args);}, wait);};
}// 函數節流的實現;
function throttle(fn, delay) {var preTime = Date.now();return function () {var context = this,args = arguments,nowTime = Date.now();// 如果兩次時間間隔超過了指定時間,則執行函數。if (nowTime - preTime >= delay) {preTime = Date.now();return fn.apply(context, args);}};
}
函數防抖是指在事件被觸發 n 秒后再執行回調,如果在這 n 秒內事件又被觸發,則重新計時。這可以使用在一些點擊請求的事件上,避免因為用戶的多次點擊向后端發送多次請求。
函數節流是指規定一個單位時間,在這個單位時間內,只能有一次觸發事件的回調函數執行,如果在同一個單位時間內某事件被觸發多次,只有一次能生效。節流可以使用在 scroll 函數的事件監聽上,通過事件節流來降低事件調用的頻率。