Изучаю JavaScript. Запутался в коллбэках, обьясните как и почему это работает
Функция debounce принимает в себя аргументом другую функцию (у которой есть свой аргумент "event") и возвращает функцию которая откладывает вызов функции-аргумента при наступлении события onInput. Итак, внутри debounce происходит return с заданным параметром 'arg'. Из всего этого мне не понятно, каким образом и почему в return(arg) попадает именно аргумент функции "func" (то есть "event"), а не новый аргумент возвращаемой функции, например?
Помогите пожалуйста разобраться. Рабочий код приведен ниже:
const debounce = (func) => {
let timeoutId;
return (arg) => {
if (timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(() => {
func(arg);
}, 1000)
};
};
const onInput = debounce((event) => {
fetchData(event.target.value);
});
input.addEventListener('input', onInput);
Ответы (1 шт):
Не "в return(arg) попадает аргумент функции func", а в функцию func попадает параметр, с которым вызывается onInput.
Обработчиком события является то, что вернул вызов функции debounce (onInput). Этот обработчик содержит ссылку на func в своем замыкании и вызывает func, если после последнего события прошло больше секунды.