Возврат функции из функции - как работает замыкание? [дубликат]
1,00
р.
р.
На этот вопрос уже даны ответы здесь:
Как работают замыкания в JavaScript (7 ответов) Закрыт 6 лет назад. Сообщество рассмотрело необходимость повторного открытия этого вопроса 2 года назад и оставило его закрытым: Исходные причины закрытия не были исправлены
Учу js и, к сожалению, не понял одну вещь 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: почему при первом вызове функции переменная currentCount = 1, ведь возвращаемое функцией currentCount++, следовательно должно быть 2. Так почему return function()... пропускается? Вопрос 2: почему при вызовах функции currentCount не присваивается 1, ведь var currentCount = 1
Ответ Когда в строке var counter = makeCounter() выполняется функция makeCounter, она присваивает значение 1 своей локальной переменной currentCount и возвращает, но не выполняет анонимную функцию. Так как анонимная функция использует переменную из внешней области видимости, создается "замыкание" (closure), которое соединяет экземпляр переменной currentCount с возвращаемым экземпляром анонимной функции.