Доброго времени суток!
Перечитал кучу умных букав и никак не въеду как работают замыкания. Я понял, что они хранят переменные в локальной области видимости, только не пойму разницу между замыканием и объектом, в котором эта же переменная хранится как свойство. Предложенные в учебных пособиях задачи у меня получалось реализовать с помощью объектов, мне так понятнее что и как работает.
Пример задачи с данного сайта:
function makeCounter() {
var currentCount = 0;
return function() {
currentCount++;
return currentCount;
};
}
var counter = makeCounter();
// каждый вызов увеличивает счётчик
counter();
counter();
alert( counter() ); // 3
То, что удалось сделать мне:
var counter = {
i: 0,
count: function() {
return ++counter.i;
}
}
counter.count();
counter.count();
alert(counter.count());// 3
Работает точно так же, только мне так понятнее и при этом есть возможность обнулять счетчик или менять его значение, присвоив counter.i нужное значение. И код при этом короче.
Подскажите, пожалуйста, есть ли разница и в чем.