Сейчас изучаю JS, дошёл до счётчиков и тут встал непонятный мне код. Точнее код то понятный кроме одного момента - Почему переменная "currentCount" увеличивается каждый раз на 1 и не обнуляется? Ведь в функции точно прописано "var currentCount = 1", то есть каждый раз обнулять до единицы.
function makeCounter() {
var currentCount = 1;
return function() {
return currentCount++;
};
}
var counter = makeCounter();
alert( counter() );
alert( counter() );
alert( counter() );
var counter2 = makeCounter();
alert( counter2() );
С уважением.
var - это когда создаёшь заново.
_____________
Принимаю заказы, писать в ЛС
Zzepish
5.05.2016 - 19:10
Ибо области видимости. Вложенные функции видят внешние переменные. Ну и про var покури
redreem
5.05.2016 - 19:57
var counterN = makeCounter(); - эта строка создает новый объект, происходит инициализация счетчика, это типа аналог конструктора
объект возвращает анонимную функцию, инкрементирующую счетчик
function() { // (**)
return currentCount++;
};
счетчик не обнуляется потому, что конструктор возвращает анонимную функцию, которая и присваивается экземпляру, а инциализация происходит только 1 раз.
Цитата (redreem @ 5.05.2016 - 15:57) |
var counterN = makeCounter(); - эта строка создает новый объект, происходит инициализация счетчика, это типа аналог конструктора
объект возвращает анонимную функцию, инкрементирующую счетчик function() { // (**) return currentCount++; };
счетчик не обнуляется потому, что конструктор возвращает анонимную функцию, которая и присваивается экземпляру, а инциализация происходит только 1 раз. |
Это обыкновенная вложения функция. Никакого объекта тут не создаётся
redreem
5.05.2016 - 20:28
Цитата (Oyeme @ 5.05.2016 - 21:18) |
Это обыкновенная вложения функция. Никакого объекта тут не создаётся |
пожалуй да, но суть от этого не меняется. привык к тому, что всё в js - объект "на какой-то стадии схлопнутости". в данном случае до функции
Спасибо всем за ответы. Сумел разобраться.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.