Показать сообщение отдельно
Старый 19.04.2004, 17:39
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 5  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
область видимости и наследование. вот о чем речь собственно.

более того, многие авторы достаточно серьезных книг таки не воткнулись в тему.
например на мои вопросы к дебройлу с этим примером он ответил, что это наверное баг

хотя это не так.

объяснение такое:

1) любой объект, а также его наследники, суть вещь безымянная и всего лишь область памяти. Кстати и мувиклип тоже.
2) объект нельзя удалить напрямую. типа delete my_object
- таким образом мы удаляем лишь ссылку на него. но не сам объект.
3) объект может быть удален ТОЛЬКО сборщиком мусора, если на него не осталось ссылок. других вариантов нет.

- как это влияет на то, что мой пример работает?
- при вызове функции создается временный объект, который как минимум является наследником Object, в именном пространстве которого и хранятся все временные (var) переменные. Этот временный объект удаляется по окончании работы функции.
НО
как мы выяснили право удалять имеет только сборщик мусора.
и у нас осталась функция, которая имеет ссылку на переменную, находящуюся в этом объекте. соответственно у переменной осталась ссылка на объект-родитель и этот родитель не будет удален сборщиком мусора - ссылочка-то вот она!

Поэтому переменная не обнуляется.
- все работает правильно.