Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Возврат функции из функции - как работает замыкание? [дубликат]

На данный вопрос уже ответили: Как работают замыкания в JavaScript 6 ответов Учу 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 с возвращаемым экземпляром анонимной функции.

Комментариев нет:

Отправить комментарий