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 по умолчанию.