foundation
Неизменяемость объектов
Мутация, поверхностные копии, Object.freeze, structural sharing и trade-offs состояния приложения.
Неизменяемость — создание новых значений вместо мутации общего состояния. В JavaScript это spread, `Object.assign`, `Object.freeze`, TypeScript `readonly` или библиотеки вроде Immer.
Structural sharing переиспользует неизменённые ветви. UI-фреймворки детектят изменения по равенству ссылок на верхнем уровне состояния.
`JSON.parse(JSON.stringify(obj))` теряет функции, `undefined`, `Date`, `Symbol` и прототипы.
Локальная мутация внутри функции допустима, если состояние не утекает наружу.
На интервью объясняйте концепцию на конкретном примере и называйте поведение рантайма, которое проверяют.
Типовые ошибки: путать похожие API и забывать edge cases в live coding.
Компромисс часто между ясностью и производительностью или между безопасностью и удобством.
Чеклист:
- Определите границу мутации.
- Предпочитайте structural sharing для обновлений состояния.
- Не используйте JSON clone по умолчанию.