Изучаю 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 шт):

Автор решения: Igor

Не "в return(arg) попадает аргумент функции func", а в функцию func попадает параметр, с которым вызывается onInput.

Обработчиком события является то, что вернул вызов функции debounce (onInput). Этот обработчик содержит ссылку на func в своем замыкании и вызывает func, если после последнего события прошло больше секунды.

→ Ссылка