Нужно написать функцию memoize — обёртку для мемоизации. Для простоты можно считать, что функция всегда будет иметь только один аргумент, и это будет примитивное значение.

Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.

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

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

Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.

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

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

Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.

function memoize(fn) {
  const cache = new Map();
  const negativeZero = Symbol('negative zero');
  return function (value) {
    const key = Object.is(value, -0) ? negativeZero : value;
    if (cache.has(key)) return cache.get(key);
    const result = fn(value);
    cache.set(key, result);
    return result;
  };
}

Отдельный ключ сохраняет различие +0 и -0. Ошибки не кешируются; this и внешнее изменяемое состояние в этом контракте не учитываются. Для неограниченного набора аргументов нужен лимит или политика очистки кеша.

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

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

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

Подробнее