function sum(a, b) {

Если требуется мемоизировать sum, кешируйте результат по паре аргументов, проверяя наличие ключа, а не truthy-значение результата.

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

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

Если требуется мемоизировать sum, кешируйте результат по паре аргументов, проверяя наличие ключа, а не truthy-значение результата.

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

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

Условие

function sum(a, b) { return a + b; }

function memo() {}

Ответ

Если требуется мемоизировать sum, кешируйте результат по паре аргументов, проверяя наличие ключа, а не truthy-значение результата.

Предполагаем чистую функцию двух конечных чисел. Для произвольных объектов и переменного числа аргументов нужен другой контракт.

function memo(fn) {
  const cache = new Map();
  const key = n => Object.is(n, -0) ? '-0' : String(n);
  return (a, b) => {
    if (!Number.isFinite(a) || !Number.isFinite(b))
      throw new TypeError('Нужны два конечных числа');
    const k = key(a) + ':' + key(b);
    if (cache.has(k)) return cache.get(k);
    const value = fn(a, b);
    cache.set(k, value);
    return value;
  };
}
const cachedSum = memo(sum);

Нулевой результат кешируется корректно, знак нуля различается. Кеш растёт с числом уникальных пар, поэтому в долгоживущем приложении нужен лимит или очистка.

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

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

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

Подробнее