- Почему вызов count () не всегда равен 1?
Эти вложенные методы создают замыкание, при котором инициализация происходит только один раз, а вложенный внутренний метод возвращается каждый раз. Пожалуйста, прочитайте эту ссылку, чтобы понять:
https://www.w3schools.com/js/js_function_closures.asp
Если вы предпочитаете MDN, используйте ссылку ниже. Тем не менее, приведенная выше ссылка содержит пример, который, как я считаю, соответствует сценарию участника:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
И, что еще более подробно, это, кажется, хорошо продуманное объяснение:
https://blogs.msdn.microsoft.com/ericlippert/2003/09/17/what-are-closures/
Почему getCounter () возвращает объект функции вместо выполнения метода?
Читая ту же ссылку выше, вы можете увидеть, как определить getCounter (), чтобы он выполнял именно то, о чем вы его просилисделать. Вы должны определить его как функцию, вызывающую себя. В вашем примере он не определен с использованием синтаксиса самообращения. См. Пример ниже, если вы хотите, чтобы он работал, используя getCounter () вместо count ().
var getCounter = (function () {
var counter = 0;
var countUpBy1 = function () {
counter = counter + 1;
return counter;
};
return countUpBy1;
})();
getCounter();