На данный вопрос уже ответили:
Друзья, учу JavaScript и столкнулся с проблемой.
Вот код:
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
Счетчик работает правильно - вызвали 3 раза - значение 3 и имеет. Но почему так происходит? Ведь в функции ему каждый раз присваивается значение 1. Следовательно при каждом вызове функции он должен выдавать 1. По крайней мере так в Си подобных языках. Предположу, что так происходит потому, что переменную один раз объявили и она стала некой глобальной и в последующих заходах в эту функцию это строка просто пропускается... В общем буду признателен за пояснение.
Есть хорошая статья про замыкания:
Замыкания — это функции, ссылающиеся на независимые (свободные) переменные. Другими словами, функция, определённая в замыкании, «запоминает» окружение, в котором она была создана.
В вашем случае функция makeCounter
возвращает функцию, которая как бы "захватила" currentCount
и, следовательно, вызывая выполнения экземпляра counter
- вы инкрементируете счетчик. Создавая counter2
вы создаете новый экземпляр, который содержит в себе новый счетчик currentCount
, поэтому они и выполняются независимо.
Вдобавок, есть уже ответ на ваш вопрос: Как работают замыкания в JavaScript
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При вызове ObjectId выдает ошибку: Type error: hex is not a function
Здравствуйте, есть проблемка, нужно сделать автоподскрол елемента на центр когда он в фокусе, то есть идет до центра а дальше стоит там до самого...