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