Выбор ответа Middle Функции высшего порядка обновлено

Ошибка в ключе мемоизации

Вопрос

Что выведет код?

function memoize(fn) {
  const cache = {};
  return (...args) => {
    const key = args[0];
    if (!(key in cache)) cache[key] = fn(...args);
    return cache[key];
  };
}
const add = memoize((a, b) => a + b);
console.log(add(1, 2), add(1, 5));

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 3 3. Ключ кеша строится только из первого аргумента.

Варианты ответа

  1. 3 6
  2. 3 3правильный ответ
  3. TypeError
  4. 6 6

Разбор

Ключ кеша строится только из первого аргумента. Первый вызов кладёт 3 под ключ 1, второй находит ключ 1 и возвращает 3, не вызывая функцию. Это реальный баг наивных memoize: ключ должен учитывать все аргументы (например, вложенные Map по каждому аргументу или JSON.stringify(args) для примитивов). 6 нигде не вычисляется, ошибки тоже нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.