Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   AS-магия: не совсем локальные переменные (http://www.flasher.ru/forum/showthread.php?t=95139)

WindWalker 28.04.2007 01:05

AS-магия: не совсем локальные переменные
 
У кого-нибудь есть достаточно разумное объяснение, как это работает?
Код:

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. Примерно так.


Часовой пояс GMT +4, время: 15:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.