Легкий

Задача по JavaScript — Throttle

Замыкания
Оптимизация
Асинхронность
Описание
Код

Необходимо написать функцию-декоратор throttle(f, ms), которая принимает функцию и время задержки, а возвращать модифицированную функцию.

Полученная функция должна следовать следующим правилам:

Функция throttle должна вызывать функцию и запускать таймер, равный времени задержки, в течение которого функция не может быть вызвана заново. Throttle необходим для того, чтобы обеспечить возможность вызова функции не чаще, чем указанное время задержки. Если время задержки равно 500 мс, то при вызове функции, возвращенной из throttle, каждые 100 мс 10 раз подряд функция будет вызвана лишь три раза: первый вызов функции на 0мс (первая попытка вызова функции после 0 мс задержки), второй на 500 мс (пятая попытка вызова функции после 500 мс задержки) и третий на 1000 мс (десятая попытка вызова функции после 1000 мс задержки).

Пример 1:
let i = 0;
function increment() {
i++;
}
const throttledIncrement = throttle(increment, 100);

// t = 0: Вызовет throttledIncrement(). i сейчас 1.
throttledIncrement(); // i = 1

// t = 50: Вызовет throttledIncrement() еще раз.
// i все еще 1 потому что 100ms не прошло.
throttledIncrement(); // i = 1

// t = 101: Вызовет throttledIncrement() еще раз. i станет 2.
// i увеличился так как время ожидания стало больше 100ms
throttledIncrement(); // i = 2

Описание
Console
Perfomance
Очистить
Время выполнения: - мс
Запустить