Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2016, 00:33
Интересующийся
Отправить личное сообщение для Bruha1991 Посмотреть профиль Найти все сообщения от Bruha1991
 
Регистрация: 17.01.2016
Сообщений: 10

Объясните локальную переменную в функции
Здравствуйте! Есть код
function makeCounter() {
  var currentCount = 1;

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

var counter = makeCounter(); // (*)

// каждый вызов увеличивает счётчик и возвращает результат
alert( counter() ); // 1
alert( counter() ); // 2
alert( counter() ); // 3

// создать другой счётчик, он будет независим от первого
var counter2 = makeCounter();
alert( counter2() ); // 1

Не могу понять:
1) почему наращивается первый счетчик;
2) почему второй счетчик независим (т.е. значения снова начинаются с
1-цы) от первого.
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2016, 00:56
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Сообщение от Bruha1991
1) почему наращивается первый счетчик;
var counter = makeCounter();

В переменную counter вернется анонимная функция внутри makeCounter. У этой анонимной функции [[Scope]] ссылается на объект переменных makeCounter. Соответственно каждый вызов counter будет увеличивать переменную currentCount.

Сообщение от Bruha1991
2) почему второй счетчик независим (т.е. значения снова начинаются с 1-цы) от первого.
Каждый запуск makeCounter — новый объект переменных.
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2016, 01:05
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Замыкания.
В здешнем учебнике неплохо разобраны.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести переменную из одной функции в другую EWB Общие вопросы Javascript 8 19.01.2016 23:20
Перезаписать переменную после выполнения функции sig jQuery 9 18.01.2016 20:54
как получить переменную в дочерней функции Yurik Общие вопросы Javascript 2 16.03.2012 15:44
Как достать переменную из функции KamalovRadik Firefox/Mozilla 6 19.11.2011 19:09
Как сделать локальную переменную глобальной?? Дмитрий Общие вопросы Javascript 8 02.11.2010 03:33