Показать сообщение отдельно
  #2 (permalink)  
Старый 14.04.2013, 17:04
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от 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 встречается внутри функции которую мы возвращаем, и понимет что эта байда может этой функции пригодится и не удаляет её, а пихает куда?

а пихает он её в ЗАМЫКАНИЕ этой функции))) это если в кратце говорить..

Последний раз редактировалось megaupload, 14.04.2013 в 17:11.
Ответить с цитированием