id_pripyat
@id_pripyat

Зачем передавать результат функции в переменную в замыканиях?

Здравствуйте, изучаю JS, хотел освоить тему замыканий.

Есть пример:
function counter() {
  var counter = 0;

  return function() {
    console.log(counter = counter + 1)
  }
}

var b = counter();
b();
b();
b();
b();
b();


Мне не понятно, почему мы должны объявлять b и передавать результат функции в нее?

var b = counter();

И почему мы просто не можем писать:

function counter() {
  var counter = 0;

  return function() {
    console.log(counter = counter + 1)
  }
}

counter()();
counter()();
counter()();
counter()();
counter()();
counter()();
  • Вопрос задан
  • 961 просмотр
Решения вопроса 1
id_pripyat
@id_pripyat Автор вопроса
Я все понял, после вдумчивого прочтения данной статьи. Всем советую: ссылка
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
KevlarBeaver
@KevlarBeaver
Разработчик
Потому что в первом случае внутренняя функция будет создана один раз, а во втором - каждый раз при вызове counter()
Ответ написан
@id141365154
Веб разработчик
Я бы переписал это таким образом
function Counter() {
  var counter = 0;
​
  return function() {
    console.log(counter = counter + 1)
  }
}
​
var cnt1 = new Counter();
var cnt2 = new Counter();

cnt1(); // 1
cnt1(); // 2
cnt2(); // 1


Думаю такая запись более информативна.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы