[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по счётчику
ak167
Сейчас изучаю JS, дошёл до счётчиков и тут встал непонятный мне код. Точнее код то понятный кроме одного момента - Почему переменная "currentCount" увеличивается каждый раз на 1 и не обнуляется? Ведь в функции точно прописано "var currentCount = 1", то есть каждый раз обнулять до единицы.
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

С уважением.
Миша
var - это когда создаёшь заново.

_____________
Принимаю заказы, писать в ЛС
Zzepish
Ибо области видимости. Вложенные функции видят внешние переменные. Ну и про var покури
redreem
var counterN = makeCounter(); - эта строка создает новый объект, происходит инициализация счетчика, это типа аналог конструктора

объект возвращает анонимную функцию, инкрементирующую счетчик
function() { // (**)
return currentCount++;
};

счетчик не обнуляется потому, что конструктор возвращает анонимную функцию, которая и присваивается экземпляру, а инциализация происходит только 1 раз.
Oyeme
Цитата (redreem @ 5.05.2016 - 15:57)
var counterN = makeCounter(); - эта строка создает новый объект, происходит инициализация счетчика, это типа аналог конструктора

объект возвращает анонимную функцию, инкрементирующую счетчик
function() { // (**)
return currentCount++;
};

счетчик не обнуляется потому, что конструктор возвращает анонимную функцию, которая и присваивается экземпляру, а инциализация происходит только 1 раз.

Это обыкновенная вложения функция. Никакого объекта тут не создаётся
redreem
Цитата (Oyeme @ 5.05.2016 - 21:18)
Это обыкновенная вложения функция. Никакого объекта тут не создаётся


пожалуй да, но суть от этого не меняется. привык к тому, что всё в js - объект "на какой-то стадии схлопнутости". в данном случае до функции smile.gif
ak167
Спасибо всем за ответы. Сумел разобраться.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.