🟨 JavaScript
Лёгкая
🕐 5 мин

Функция-счетчик: makeCounter

Цель: создать функцию makeCounter(initialValue = 0), которая возвращает функцию‑счётчик. Первый вызов возвращает начальное значение (или 0), каждый последующий — на 1 больше. Каждый счётчик независим.

💡 Подсказка решения:
  • Используйте замыкания (closures) для сохранения состояния счетчика
  • Оператор ++ увеличивает значение на 1
  • Можно использовать значение по умолчанию для параметра: function makeCounter(initialValue = 0)
  • Помните про разницу между count++ (возвращает текущее значение, затем увеличивает) и ++count (увеличивает, затем возвращает)
👀 Подглядеть решение:
function makeCounter(initialValue = 0) {
    // Закрытая переменная состояния — доступна только из возвращаемой функции
    let count = initialValue;
    
    // Возвращаем функция‑счётчик: отдаёт текущее значение, затем увеличивает его
    return function() {
      return count++; // пост‑инкремент: сначала вернуть старое значение, потом увеличить
    };
}
  
window.makeCounter = makeCounter;

Почему именно так:

  1. Используется замыкание, чтобы сохранить переменную count между вызовами. Это даёт независимое состояние для каждого нового счётчика.
  2. Применяется count++, а не ++count, чтобы первый вызов вернул начальное значение без увеличения. Это требование заложено в тестах.
  3. Передача initialValue = 0 по умолчанию упрощает код — можно не проверять, передан ли параметр.
  4. Каждое выполнение makeCounter(...) создаёт новое лексическое окружение, поэтому counter1 и counter2 не мешают друг другу.

Описание задачи

Создайте функцию makeCounter, которая принимает необязательное целое число в качестве начального значения и возвращает функцию-счетчик.

Как должна работать функция:

  1. Первый вызов возвращенной функции должен вернуть начальное значение (если передано) или 0 (если не передано)
  2. Каждый последующий вызов должен возвращать значение на 1 больше предыдущего
  3. Каждый счетчик независим - разные вызовы makeCounter создают отдельные счетчики

Примеры использования:

Счетчик без начального значения:

const counter = makeCounter();
counter(); // 0
counter(); // 1
counter(); // 2

Счетчик с начальным значением:

const counter = makeCounter(5);
counter(); // 5
counter(); // 6
counter(); // 7

Независимые счетчики:

const counter1 = makeCounter(10);
const counter2 = makeCounter(20);
 
counter1(); // 10
counter2(); // 20
counter1(); // 11
counter2(); // 21

Требования:

  • Функция должна называться makeCounter
  • Принимает один необязательный параметр - начальное значение
  • Возвращает функцию, которая при каждом вызове увеличивает счетчик на 1
  • Если начальное значение не передано, счетчик начинается с 0
  • Разные счетчики должны работать независимо друг от друга

🧑‍💻 Это не баг! Это фича!

Редактор кода намеренно скрыт на мобильном.

Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.

📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.

💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!