Answer

Answer

t.me/js_test

Ответ:

function debounce(f, ms) {
    let isCooldown = false;

    return function () {
        if (isCooldown) return;

        f.apply(this, arguments);

        isCooldown = true;

        setTimeout(() => (isCooldown = false), ms);
    };
}

Объяснение:

Создаём флаг isCooldown к которому мы сможем обращаться из внутренней функции с помощью замыкания. Далее возвращаем функцию в которой проверяем, если isCooldown равен true то ничего не делаем, если же isCooldown равен false то вызываем функцию которую нам передавали и создаём таймер который изменит флаг через ms миллисекунд.

Код для проверки:

function debounce(f, ms) {
    let isCooldown = false;

    return function () {
        if (isCooldown) return;

        f.apply(this, arguments);

        isCooldown = true;

        setTimeout(() => (isCooldown = false), ms);
    };
}

let fn = debounce(console.log, 1000);

fn(1); // 1
fn(2); // nothing

setTimeout(() => fn(3), 100); // nothing
setTimeout(() => fn(4), 1100); // 4
setTimeout(() => fn(5), 1500); // nothing

Report Page