Я читаю учебник (
https://learn.javascript.ru/closure), и не могу никак взять в толк, почему так. Такой пример:
function makeCounter() {
let count = 0;
return function() {
return count++; // есть доступ к внешней переменной "count"
};
}
let counter = makeCounter();
alert( counter() ); // 0
alert( counter() ); // 1
alert( counter() ); // 2
1. Почему присваиваем переменной функцию, а если так не сделать, и просто поместить в alert саму функцию, выводит просто её содержимое в текстовом виде:
alert(makeCounter());
Результат:
function () {
return count++; // есть доступ к внешней переменной "count"
}
2. Почему в следующих итерациях count увеличивается на 1. Хотя, функция makeCounter должна вызываться как бы заново, и присваивать переменной count = 0. И только на следующем шаге увеличивать на 1. Я пробовал запускать через визуализатор и получается, что переменной count присваивается 0 только один раз, а все остальные вызовы идет обращение сразу к вложенной функции, соответственно, переменная остается такой же, как и в предыдущей итерации, не обнуляется.
Про область видимости читал).
В общем, мне по большей части не понятно, почему идет обращение сразу к вложенной функции и игнорируется внешняя, где переменной count присваивается 0.