函數撙節:是確保函數特定的時候內最多實行一次。
如js轉動事宜異常頻仍,輕微轉動一下就會觸發許屢次,假如頻仍觸發的轉動,每一次都去搜檢是不是到頁面底部了再次造成了糟蹋。因而設置一個開關,一次只能有一個觸發實行,並對實行設置計時一段時候再實行,實行終了以後再解鎖。這就是函數撙節。
完成思緒:經由過程內部運用閉包來緩存上次觸發函數的時候戳,然後磨練本次函數實行時的時候戳和上次緩存的時候戳之差是不是小於傳入的時候值參數。
const restrictFn = (fn, wait) => {
let stime = 0,
etime;
let isPause = false;//是不是撙節的開關
function result() {//經由過程一個閉包來堅持對每次函數實行的時候戳的援用
etime = Date.now();
if (etime - stime < wait && isPause === false) {
return;
} else {
fn()
}
stime = etime;
}
result.flash = function () {//馬上實行,跳過撙節
fn()
}
result.pause = function () {//停息撙節
isPause = true;
}
result.resume = function () {//恢復撙節
isPause = false;
}
return result;
}
運用實例:
function print() {
console.log('print something')
}
let restrictedPrint = restrictFn(print,1000);