Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.05.2017, 20:28
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

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

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

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

Значение в currentCount не запоминается, почему?
Ответить с цитированием
  #2 (permalink)  
Старый 09.05.2017, 20:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

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
Ответить с цитированием
  #3 (permalink)  
Старый 09.05.2017, 20:42
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

я знаю что так сработает, вопрос, почему не работает та как я написал..?
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2017, 20:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

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


  return 2

}
Ответить с цитированием
  #5 (permalink)  
Старый 09.05.2017, 21:02
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

Эм, я пытаюсь разобраться с замыканиями. И тот шедевр с которого начался пост, был эксперимент на тему... Работать данное изваяние должно было так -же как код который предложили вы, но не сложилось, и я не понимаю почему. Инкремент работает. Но, такое впечатление, что я постоянно создаю новый counter. Или поскольку я возвращаю число так и есть?
Ответить с цитированием
  #6 (permalink)  
Старый 09.05.2017, 21:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

Rora,
потому что нет никакого замыкания, ваша функция в посте№1 и в посте №4 одинаковы.
Ответить с цитированием
  #7 (permalink)  
Старый 09.05.2017, 21:46
Новичок на форуме
Отправить личное сообщение для Rora Посмотреть профиль Найти все сообщения от Rora
 
Регистрация: 09.05.2017
Сообщений: 6

рони,
Я уже начал об этом догадываться. Спасибо. Перечитаю перечитанное еще раз.
Ответить с цитированием
  #8 (permalink)  
Старый 10.05.2017, 10:09
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cookie почему не работает скрипт Alven Общие вопросы Javascript 1 01.09.2013 03:17
В Mozilla работает а в Opera нет почему? alex2012 Общие вопросы Javascript 2 03.08.2013 22:43
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
Помогите с javascript (Почему не работает) remus Оффтопик 9 09.06.2010 11:18
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01