Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не работает? (https://javascript.ru/forum/misc/68804-pochemu-ne-rabotaet.html)

Rora 09.05.2017 20:28

Почему не работает?
 
День добрый. Подскажите, почему данный код не работает?
function makeCounter() {
  var currentCount = 1;

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

var counter = makeCounter(); 
alert (typeof counter);
alert( counter() );// выводит 2
alert( counter() );// выводит 2

Значение в currentCount не запоминается, почему?

рони 09.05.2017 20:32

Rora,
function makeCounter() {
  var currentCount = 1;

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

}

var counter = makeCounter();
alert (typeof counter);
alert( counter() );// выводит 1
alert( counter() );// выводит 2
alert( counter() );// выводит 3

Rora 09.05.2017 20:42

я знаю что так сработает, вопрос, почему не работает та как я написал..?

рони 09.05.2017 20:44

Rora,
вы написали
function makeCounter() {


  return 2

}

Rora 09.05.2017 21:02

Эм, я пытаюсь разобраться с замыканиями. И тот шедевр с которого начался пост, был эксперимент на тему... Работать данное изваяние должно было так -же как код который предложили вы, но не сложилось, и я не понимаю почему. Инкремент работает. Но, такое впечатление, что я постоянно создаю новый counter. Или поскольку я возвращаю число так и есть?

рони 09.05.2017 21:34

Rora,
потому что нет никакого замыкания, ваша функция в посте№1 и в посте №4 одинаковы.

Rora 09.05.2017 21:46

рони,
Я уже начал об этом догадываться. Спасибо. Перечитаю перечитанное еще раз.

MallSerg 10.05.2017 10:09

Цитата:

Сообщение от Rora
почему данный код не работает?

Данный код работает но не так как ты ожидаешь.
А неправильные ожидания имхо от того что ты учишься по неправильной книжке где плохо объясняют когда и для каких функций создаются замыкания а когда не создаются.
Неплохое объяснение https://www.youtube.com/watch?v=rpIxGwFz0Xs


Часовой пояс GMT +3, время: 21:58.