Создание функции‑обёртки с мемоизацией

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

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

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

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

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

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

Условие

Реализуйте функцию memoize, которая принимает другую функцию в качестве аргумента и возвращает её «мемоизированную» версию. Возвращаемая функция должна сохранять результат выполнения для каждого уникального входного параметра и при последующих вызовах с тем же параметром отдавать сохранённое значение.

const square = (x) => x * x;

const memoize = (fn) => {};

const cached = memoize(square);

cached(4);

Ответ

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

function memoize(fn) {
  const cache = new Map();
  return function (value) {
    if (cache.has(value)) return cache.get(value);
    const result = fn(value);
    cache.set(value, result);
    return result;
  };
}
const cached = memoize(x => x * x);
cached(4); // 16
cached(4); // 16 из кеша

Контракт предполагает зависимость только от одного аргумента, не от this или внешнего состояния. Объектные ключи сравниваются по ссылке. Исключение не кешируется, потому что set не достигается. Для долгоживущего кеша нужно ограничение размера или политика очистки.

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

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

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

Подробнее