Создание функции ограничителя частоты вызовов

Это leading-edge throttle: первый вызов выполняется сразу, вызовы внутри delay игнорируются, отложенного вызова в конце интервала нет.

Короткий ответ

Что ответить на собеседовании

Это leading-edge throttle: первый вызов выполняется сразу, вызовы внутри delay игнорируются, отложенного вызова в конце интервала нет.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию throttle(fn, delay), которая возвращает обёртку, обеспечивая, что исходная функция fn будет вызываться не чаще, чем один раз за указанный интервал delay миллисекунд. Все вызовы, попадающие в период ограничения, должны игнорироваться.

Ответ

Это leading-edge throttle: первый вызов выполняется сразу, вызовы внутри delay игнорируются, отложенного вызова в конце интервала нет.

В браузерном JavaScript:

function throttle(fn, delay) {
  if (typeof fn !== 'function' || !Number.isFinite(delay) || delay < 0) {
    throw new TypeError('Invalid throttle arguments');
  }
  let last = -Infinity;
  return function (...args) {
    const now = performance.now();
    if (now - last < delay) return;
    last = now;
    return fn.apply(this, args);
  };
}

Монотонные часы не зависят от перевода системного времени. Контекст this и аргументы передаются только принятому вызову. Момент фиксируется до fn, поэтому исключение не отменяет период ограничения. Если fn асинхронна, throttle не гарантирует отсутствие перекрытия её незавершённых операций.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее