Разбираю реализацию debounce, попалось 2 варианта:
let count = 0;
const debounce = (fn, delay) => {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn(...args);
}, delay);
};
};
let myFunc = (inc) => {
console.log(count += inc)
}
myFunc = debounce(myFunc, 600)
window.addEventListener("click", () => myFunc(3));
let counter = 0;
const debounce = (fn, ms) => {
let timer;
return function () {
const fnCall = () => {
fn.apply(this, arguments);
};
clearTimeout(timer);
timer = setTimeout(fnCall, ms);
};
};
function myFunc(inc) {
console.log((counter += inc));
}
myFunc = debounce(myFunc, 600);
window.addEventListener("click", () => myFunc(3));
Первый вопрос заключается в том, как аргументы функции которая оборачивается в debounce, встраиваются вот здесь:
return function (...args) {
и здесь
fn.apply(this, arguments);
. Откуда берется этом массив с аргументами?
Второй вопрос в том, какая из реализаций лучше? Через apply или через вызов оригинальной передаваемой функции?
Спасибо.