Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.
Нужно написать функцию memoize — обёртку для мемоизации. Для простоты можно считать, что функция всегда будет иметь только один аргумент, и это будет примитивное значение.
Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для чистой синхронной функции одного примитивного аргумента храните результаты в Map и проверяйте наличие через has, чтобы кешировать даже undefined.
function memoize(fn) {
const cache = new Map();
const negativeZero = Symbol('negative zero');
return function (value) {
const key = Object.is(value, -0) ? negativeZero : value;
if (cache.has(key)) return cache.get(key);
const result = fn(value);
cache.set(key, result);
return result;
};
}
Отдельный ключ сохраняет различие +0 и -0. Ошибки не кешируются; this и внешнее изменяемое состояние в этом контракте не учитываются. Для неограниченного набора аргументов нужен лимит или политика очистки кеша.