Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.
Реализуйте функцию memoize, которая возвращает мемоизированную версию переданной функции и имеет метод очистки кэша clearCache.
Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Мемоизация сохраняет результат для уже встречавшихся аргументов, а clearCache должен очищать то же хранилище, которое использует обёртка.
Простой вариант для чистой синхронной функции учитывает аргументы и this по Object.is, включая undefined-результат. Поиск линейный; для большого кеша нужен более эффективный индекс и ограничение размера.
function memoize(fn) {
let entries = [];
function wrapped(...args) {
const hit = entries.find(e => Object.is(e.receiver, this) &&
e.args.length === args.length && e.args.every((v, i) => Object.is(v, args[i])));
if (hit) return hit.value;
const value = fn.apply(this, args);
entries.push({receiver: this, args, value});
return value;
}
wrapped.clearCache = () => { entries = []; };
return wrapped;
}
Изменение полей объекта-аргумента не меняет его идентичность; async-ошибки требуют отдельной политики.