Код Middle Реализация с нуля обновлено

Наблюдаемое значение

Условие

createSignal(initial): value (геттер и сеттер), subscribe(fn) с отпиской. Подписчик вызывается при изменении. Установка того же значения не вызывает подписчиков.

Что проверяют тесты

  • хранит значение

  • уведомляет

  • то же значение не будит подписчиков

  • NaN тоже не будит

  • отписка

Как подойти

Ядро сигналов (Solid, Vue ref, Angular signals). Сравнение перед рассылкой - не оптимизация, а часть контракта: без него присвоение того же значения вызовет каскад перерисовок. Object.is выбран не случайно - именно его использует React в сравнении состояния, и по той же причине: NaN !== NaN дал бы вечный цикл обновлений.

Подсказки: 3
  1. Геттер и сеттер прячут переменную и дают точку перехвата записи.
  2. Object.is, а не ===: иначе NaN будет считаться изменением бесконечно.
  3. Set даёт уникальность подписчиков и удаление за O(1).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.