Сначала определите равенство аргументов: по ссылке или по содержимому; для ссылочного варианта подходит дерево Map/WeakMap по позициям аргументов.
Как бы вы реализовали мемоизацию функции с несколькими аргументами, включая непримитивные значения — объекты и массивы?
Сначала определите равенство аргументов: по ссылке или по содержимому; для ссылочного варианта подходит дерево Map/WeakMap по позициям аргументов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сначала определите равенство аргументов: по ссылке или по содержимому; для ссылочного варианта подходит дерево Map/WeakMap по позициям аргументов.
Объекты и массивы можно использовать как ключи WeakMap, примитивы — Map. Структурное сравнение дороже и требует правил для циклов, типов и порядка ключей. Изменение объекта после кэширования делает старый результат опасным, если функция зависит от его содержимого; нужен контракт неизменяемых входов или инвалидация.