function makeCounter() {
var currentCount = 0;
// возвращаемся к функции
function counter() {
return ++currentCount;
}
// ...и добавляем ей методы!
counter.set = function(value) {
currentCount = value;
};
counter.reset = function() {
currentCount = 0;
};
return counter;
}
var counter = makeCounter();
alert( counter() ); // 1
alert( counter() ); // 2
counter.reset();
alert( counter() ); // 1
То есть понятия метод в JS употребляется только, когда они находятся в function? и получается функция это своего рода объект судя по синтаксису: counter.set?
Мне не понятно как работает return counter; каков алгоритм действий?Как я понимаю при вызове function makeCounter() создаётся его LexicalEnvironment со свойствами -
LexicalEnvironment = {counter: function(){}}
. При
var counter = makeCounter();
мы вызываем эту функцию и получаем возвращаемую
return counter;
(поч му не так:
return counter();
) ?
И собственно каков алгоритм при
counter.reset();
как всё работает в последовательности? ТО есть
function counter()
теперь как объект ? обращаясь к его методу
counter.reset = function()
мы меняем:
function counter() {
return ++currentCount;
}
на
function counter() {
return currentCount = 0;
}
или как ?
Запутался, объясните пожалуйста по шагам....