Реализуйте функцию memoize, которая возвращает мемоизированную версию переданной функции и имеет метод очистки кэша clearCache.

Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.

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

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

Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.

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

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

Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.

Простой вариант для чистой синхронной функции учитывает аргументы и this по Object.is, включая undefined-результат. Поиск линейный; для большого кеша нужен более эффективный индекс и ограничение размера.

function memoize(fn) {
  let entries = [];
  function wrapped(...args) {
    const hit = entries.find(e => Object.is(e.receiver, this) &&
      e.args.length === args.length && e.args.every((v, i) => Object.is(v, args[i])));
    if (hit) return hit.value;
    const value = fn.apply(this, args);
    entries.push({receiver: this, args, value});
    return value;
  }
  wrapped.clearCache = () => { entries = []; };
  return wrapped;
}

Изменение полей объекта-аргумента не меняет его идентичность; async-ошибки требуют отдельной политики.

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

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

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

Подробнее