Untitled
unknown
javascript
2 years ago
1.2 kB
3
Indexable
Never
const someCalc = function(a) { console.log(a + this.b) }; function throttle(callback, wait, context = this) { // Ваш код здесь let nextCall = undefined; let madeFirstCall = false; let intervalId; const f = function (...args) { if (!madeFirstCall) { madeFirstCall = true; callback.bind(this)(args); } else { nextCall = [callback, [...args]]; } intervalId = setTimeout( () => { if (nextCall !== undefined) { nextCall[0].bind(this)(nextCall[1]); nextCall = undefined; } madeFirstCall = false; clearTimeout(intervalId); }, wait); }; return f.bind(context); } // затормозить функцию до одного раза в 1000 мс const f1000 = throttle(someCalc, 1000, {b: ' call'}); f1000(1); // выведет 1 call f1000(2); // (тормозим, не прошло 1000 мс) f1000(3); // (тормозим, не прошло 1000 мс) setTimeout(() => { f1000(30); // (тормозим, не прошло 1000 мс) }, 2000); // когда пройдёт 1000 мс... // выведет 3 call, промежуточное значение 2 call игнорируется