Метод 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 синхронно из этой обёртки получить нельзя.