Показать сообщение отдельно
  #24 (permalink)  
Старый 01.10.2014, 22:29
Интересующийся
Отправить личное сообщение для extrabass4 Посмотреть профиль Найти все сообщения от extrabass4
 
Регистрация: 25.06.2014
Сообщений: 20

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;
  }



или как ?

Запутался, объясните пожалуйста по шагам....
Ответить с цитированием