область видимости и наследование. вот о чем речь собственно.
более того, многие авторы достаточно серьезных книг таки не воткнулись в тему.
например на мои вопросы к дебройлу с этим примером он ответил, что это наверное баг
хотя это не так.
объяснение такое:
1) любой объект, а также его наследники, суть вещь безымянная и всего лишь область памяти. Кстати и мувиклип тоже.
2) объект нельзя удалить напрямую. типа delete my_object
- таким образом мы удаляем лишь ссылку на него. но не сам объект.
3) объект может быть удален ТОЛЬКО сборщиком мусора, если на него не осталось ссылок. других вариантов нет.
- как это влияет на то, что мой пример работает?
- при вызове функции создается временный объект, который как минимум является наследником Object, в именном пространстве которого и хранятся все временные (var) переменные. Этот временный объект удаляется по окончании работы функции.
НО
как мы выяснили право удалять имеет только сборщик мусора.
и у нас осталась функция, которая имеет ссылку на переменную, находящуюся в этом объекте. соответственно у переменной осталась ссылка на объект-родитель и этот родитель не будет удален сборщиком мусора - ссылочка-то вот она!
Поэтому переменная не обнуляется.
- все работает правильно.