アンチディザリング
この関数は、高周波イベントがトリガーされてからn秒後に一度だけ実行され、n秒後に再び高周波イベントがトリガーされた場合は、時間が再計算されます。
function debounce(fn, wait) {
 let timeout = null;
 
 return function() {
 clearTimeout(timeout);
 
 timeout = setTimeout(() => {
 fn.apply(this, arguments);
 }, wait)
 }
}
スロットリング
高頻度イベントはトリガーされますが、n秒間に1回しか実行されないので、スロットリングは関数の実行頻度を薄めます。アンチスロットリングとの違いは、各関数呼び出しが最後に実行されるのに対し、アンチスロットリングは最後にしか実行されないことです。
function throttle(fn, wait) {
 let onOff = true;
 
 return function() {
 if (!onOff) {
 return;
 }
 
 onOff = false;
 
 setTimeout(() => {
 fn.apply(this, arguments);
 
 onOff = true;
 }, wait)
 }
}




