Код Middle Реализация с нуля обновлено
Наблюдаемое значение
Условие
createSignal(initial): value (геттер и сеттер), subscribe(fn) с отпиской. Подписчик вызывается при изменении. Установка того же значения не вызывает подписчиков.
Что проверяют тесты
хранит значение
уведомляет
то же значение не будит подписчиков
NaN тоже не будит
отписка
Как подойти
Ядро сигналов (Solid, Vue ref, Angular signals). Сравнение перед рассылкой - не оптимизация, а часть контракта: без него присвоение того же значения вызовет каскад перерисовок. Object.is выбран не случайно - именно его использует React в сравнении состояния, и по той же причине: NaN !== NaN дал бы вечный цикл обновлений.
Подсказки: 3
- Геттер и сеттер прячут переменную и дают точку перехвата записи.
- Object.is, а не ===: иначе NaN будет считаться изменением бесконечно.
- Set даёт уникальность подписчиков и удаление за O(1).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.