Выбор ответа 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. Ключ кеша строится только из первого аргумента.
Варианты ответа
3 63 3правильный ответ- TypeError
6 6
Разбор
Ключ кеша строится только из первого аргумента. Первый вызов кладёт 3 под ключ 1, второй находит ключ 1 и возвращает 3, не вызывая функцию. Это реальный баг наивных memoize: ключ должен учитывать все аргументы (например, вложенные Map по каждому аргументу или JSON.stringify(args) для примитивов). 6 нигде не вычисляется, ошибки тоже нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.