Используя AS3, я должен объявлять переменные глобально или внутри функции только тогда, когда они необходимы? - PullRequest
0 голосов
/ 14 июля 2010

В этом случае я работаю с URLLoader и URLRequest.

У меня две кнопки.Один слушает событие щелчка мыши, а затем запускает следующую функцию (за исключением кода, неприменимого к этому вопросу):

function loadURL (e:MouseEvent):void {

    ....

    var myRequest:URLRequest=new URLRequest("*URL*");
    myRequest.method=URLRequestMethod.POST;
    myRequest.data=postVars;

    var myLoader:URLLoader = new URLLoader();
    myLoader.load(myRequest);

    ....

}

Другая кнопка при нажатии вызывает другую функцию, например, resetAll, которая затемсбрасывает «сессию», удаляя все текущие переменные и отменяя все, что в данный момент выполняется.Внутри этой функции я хочу вызвать myLoader.close(myRequest);, но myLoader недоступен из resetAll.

В этом случае я должен объявить var myRequest:URLRequest=new URLRequest("*URL*"); и var myLoader:URLLoader = new URLLoader(); вне функции, даже если яони мне пока не нужны?

Я думаю, что мне здесь не хватает здравого смысла в знании AS3, но я не уверен, что это такое.Буду признателен, если кто-нибудь расскажет мне о наилучшей практике в этом случае.

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Вы можете объявить переменную URLLoader глобально и использовать локальное объявление или переменную URLRequest.

В любом случае URLRequest необходимо создавать заново для каждого нового запроса, объявив их локально, что было бы более безопасно для GC собирать его после его использования.

URLLoader не создает смысла при каждом создании заново, вы можетепросто передавайте новый объект URLReqest в метод Load каждый раз, когда вы хотите загрузить что-то с сервера.

0 голосов
/ 14 июля 2010

В некоторых случаях затворы очень полезны.(Особенно для обработки событий или для управления асинхронными кодами.) Вы можете хранить все ссылки на локальные переменные одновременно.Но когда исходный код замыканий в функции становится огромным, вам следует подумать о переносе их в другой класс.

Вот пример

Пример закрытия - wonderfl build flash online

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

0 голосов
/ 14 июля 2010

если эта функция выполняется только один раз, вы можете использовать переменные внутри функции.если эта функция выполняется более одного раза за время существования приложения, вы должны объявить переменные один раз, а затем только переконфигурировать или заново создать их.

Другое дело, если вам нужно использовать эти переменные вне функции, тогдаВы, конечно, должны объявить их глобально.(ResetAll)

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