PDA

Просмотр полной версии : AS-магия: не совсем локальные переменные


WindWalker
28.04.2007, 01:05
У кого-нибудь есть достаточно разумное объяснение, как это работает?
function test() {
var a = 2;
_root.btn.onRelease = function() {
trace (a);
}
}
test();

С тех пор, как я впервые увидел такую конструкцию, я мучаюсь в догадках: как локальная переменная может существовать вне функции?

Ну ладно бы мы просто могли испльзовать ту же самую переменную - в том же Паскале вложенные функции могут использовать локальные переменные родительской функции.

Но тут ещё и сохраняется значение после завершения функции!

Ведь onRelease() у нас будет выполнен уже после того, как test() закончит выполнение.
Так где "сидит" это значение?

etc
28.04.2007, 01:09
Переменная «а» внутри onRelease есть глобальная относительно onRelease, но локальная относительно test(). Значение хранится в памяти, GC не удаляет его в силу наличия ссылки на него внутри onRelease. Примерно так.