Сообщение от macdack
|
и почему при каждом вызове counter() меняется currentCount если всегда есть строка var currentCount = 0
|
эта строка выполняется ТОЛЬКО ОДИН РАЗ, когда вызывается функция в которой находится эта строка,
смотрим как же называется эта функция? а называется она makeCounter
смотрим СКОЛЬКО РАЗ вызывается makeCounter?? праавильно, вызывается она ОДИН РАЗ на 5 строчке
чо нам эта функция возвращает? правильно, другую функцию..
куда мы кладем то что нам возвратила функция makeCounter?? прааавильно, в переменную counter
то есть теперь у нас в переменной counter лежит та другая функция которую возвратила makeCounter когда мы её вызвали.. все 5 строчка.
даальше, что делает эта возвращенная функция которая лежит теперь в переменной counter ?
праавильно, смотрим что же она делает
function() { currentCount++; return currentCount }
она делает 2 действия, увеличивает счетчик на один currentCount++;
и возвращает значение этого щетчика return currentCount
ВОПРОС, где хранится щетчик? везд создали то мы его в контексте функции makeCounter еще когда его там через var создавали, но функция свое отработала и завершилась, где теперь хранятся её переменные?
А вот тут то и включается движок яваскрипта, чем завершить любую функцию и удалить из памяти все её переменные, он смотрит А ЕСТЬ ЛИ ЧТО ТО ЧТО ИХ ИСПОЛЬЗУЕТ или ВОЗМОЖНО БУДЕТ ИСПОЛЬЗОВАТЬ ПОТОМ)?\
и вот тут он смотрит видит что это имя currentCount встречается внутри функции которую мы возвращаем, и понимет что эта байда может этой функции пригодится и не удаляет её, а пихает куда?
а пихает он её в ЗАМЫКАНИЕ этой функции))) это если в кратце говорить..