Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объясните локальную переменную в функции (https://javascript.ru/forum/misc/60888-obyasnite-lokalnuyu-peremennuyu-v-funkcii.html)

Bruha1991 26.01.2016 00:33

Объясните локальную переменную в функции
 
Здравствуйте! Есть код
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-цы) от первого.

Decode 26.01.2016 00:56

Цитата:

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

var counter = makeCounter();

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

Цитата:

Сообщение от Bruha1991
2) почему второй счетчик независим (т.е. значения снова начинаются с 1-цы) от первого.

Каждый запуск makeCounter — новый объект переменных.

Яростный Меч 26.01.2016 01:05

Замыкания.
В здешнем учебнике неплохо разобраны.


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