Создание метода отложенного вызова функции

Метод delay возвращает обёртку, которая запоминает аргументы и this, а затем вызывает исходную функцию через setTimeout. Изменять Function.prototype для одной функции не требуется.

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

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

Метод delay возвращает обёртку, которая запоминает аргументы и this, а затем вызывает исходную функцию через setTimeout. Изменять Function.prototype для одной функции не требуется.

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

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

Условие

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

function someFn(...args) {
    console.log(...args);
}
someFn.delay(2000)('Hello', 'World'); 
// Через 2 секунды выведет: Hello World

Ответ

Метод delay возвращает обёртку, которая запоминает аргументы и this, а затем вызывает исходную функцию через setTimeout. Изменять Function.prototype для одной функции не требуется.

someFn.delay = function (ms) {
  const fn = this;
  if (!Number.isFinite(ms) || ms < 0) throw new RangeError('Invalid delay');
  return function (...args) {
    const context = this;
    return setTimeout(() => fn.apply(context, args), ms);
  };
};
someFn.delay(2000)('Hello', 'World');

Возвращается идентификатор таймера, который можно передать clearTimeout. Таймер задаёт минимальное ожидание, а не гарантию точного времени выполнения. Результат someFn синхронно из этой обёртки получить нельзя.

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

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

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

Подробнее