Условие
На причале BayTicker нужно понять замыкания. Функция showSignal должна вернуть актуальный signalLevel (после смены на 20). Фабрика createBayTicker возвращает функцию с собственным ticks - два тикера независимы. createBayTickerWithStep(3) увеличивает на шаг. Соберите отчёт в #out. HTML и CSS не трогайте. Сверьте с вкладкой «Результат».
Что нужно сделать
- Допишите
showSignal- вернуть текущийsignalLevel. - Сделайте
createBayTicker: локальныйticks, возврат функции+1. - Сделайте
createBayTickerWithStep(step), два независимых тикера и вывод пяти строк в#out.
Подсказка для новичка
Замыкание «помнит» переменную, а не старое число. Каждый вызов фабрики создаёт новый ticks. Подробнее - в «Дополнительной информации».
Стартовый код
Допишите решение в редакторе слева, сверьте с вкладкой «Результат» и нажмите Проверить. Кнопка «Помощник» подставит решение по шагам.
Вот так должно получиться
В блоке #out пять строк отчёта BayTicker:
Как пользоваться IDE
- Предпросмотр — как выглядит ваша страница.
- Результат — какой итог должен получиться.
- Описание задачи — полное условие и справка.
- Задание — краткие шаги 1–2–3 снизу.
- Помощник — подсказки по шагам.
- Черновик — ссылка на ваш код.
- Сброс кода — стартовый шаблон.
Лексическое окружение
У скрипта и у каждой функции есть скрытое «хранилище» переменных - лексическое окружение. Внутренняя часть - локальные имена, внешняя - ссылка на окружение снаружи. Если имени нет внутри, поиск идёт наружу.
Замыкание простыми словами
Замыкание - когда функция продолжает видеть внешние переменные после того, как «родительская» функция уже завершилась. Фабрика возвращает внутреннюю функцию, а та хранит ссылку на свой ticks.
Почему showSignal даёт 20
Функция не копирует число 10 в момент объявления. Она смотрит на переменную signalLevel в момент вызова - к этому времени там уже 20.
Почему A и B независимы
Каждый вызов createBayTicker() создаёт новое лексическое окружение со своим ticks. Поэтому три клика по A дают 1·2·3, а B стартует снова с 1.
Формат вывода
сигнал: 20- результатshowSignal().A: 1 · 2 · 3- три вызова первого тикера.B: 1 · 2- два вызова второго тикера.A+: 4- ещё один вызов первого.S3: 3 · 6- два вызова тикера с шагом 3.
Коротко: ссылка на переменную · фабрика с локальным ticks · два независимых тикера · шаг в замыкании.