Swartex
@Swartex
Многорукий могоног

Почему не работает вот такой код?

Привет:)
решил попрактиковатся с задачками:

Напиши функцию создания генератора sequence(start, step). Она при вызове возвращает другую функцию-генератор, которая при каждом вызове дает число на 1 больше, и так до бесконечности. Начальное число, с которого начинать отсчет, и шаг, задается при создании генератора. Шаг можно не указывать, тогда он будет равен одному. Начальное значение по умолчанию равно 0. Генераторов можно создать сколько угодно.


Скажите почему не работает вот такой код:
function makeCounter() {
  var currentCount = 1;

  return function() {
    return currentCount++;
  };
}

var counter = makeCounter();
console.log(counter);
console.log(counter);
console.log(counter);


вроде все правильно сделал, а в консоле выводит:
ad08fe291eba4d7db41fccd7b18049db.jpg
  • Вопрос задан
  • 759 просмотров
Решения вопроса 1
@IceJOKER
Web/Android developer
Потому что функцию нужно вызвать со скобками, counter()

Ваша основная функция возвращает вложенную функцию, ее вы присваиваете переменной, далее нужно эту переменную вызвать со скобками, иначе он вернет просто тело функции
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Так ведь все правильно выводит.

Сделайте counter(), тогда отработает функция
Ответ написан
Комментировать
@unknown4unnamed
Almost Front-end...
Вы забыли вызвать функцию counter
Это можно сделать так
function makeCounter() {
  var currentCount = 1;

  return function() {
    return currentCount++;
  };
}

var counter = makeCounter();
console.log(counter());
console.log(counter());
console.log(counter());

При вызове console.log(counter) Вы просто получаете тело функции а не её результат.
Ответ написан
Комментировать
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Выше вам уже коллеги ответили, но есть и еще один способ - сделать функцию самовызывающейся.
function makeCounter() {
  var currentCount = 1;

  return (function() {
    return currentCount++;
  }());
}

var counter = makeCounter();
console.log(counter); // 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы