Actionscript: Почему можно назначить переменную до ее объявления? - PullRequest
11 голосов
/ 12 августа 2011

вдохновлен вопросом int a [] = {1,2,};Странная запятая разрешена.По какой-то конкретной причине? Я вспомнил вопрос о синтаксисе в ActionScript Adobe.

По какой-то причине возможно (по крайней мере в Flex 3) присвоить значение переменной до ее объявления:

 public function foo() : void {
      a = 3;
      var a : int = 0;
 }

Имеет ли это какой-либо смысл ..?Это ошибка в компиляторе Adobe FlexBuilder?Или это связано с тем, что унаследовал старые версии Ecmascript?

Ответы [ 3 ]

17 голосов
/ 12 августа 2011

Интересным следствием отсутствия области действия уровня блока является то, что вы можете читать или записывать переменную до ее объявления, если она объявлена ​​до завершения функции.Это из-за техники, называемой hoisting, что означает, что компилятор перемещает все объявления переменных в верхнюю часть функции.Например, следующий код компилируется, даже если начальная функция trace () для переменной num происходит до объявления переменной num ...

Документация Actionscript 3.0 - переменные (цитата найдена примерно на 2/3 вниз по странице)

3 голосов
/ 12 августа 2011

Насколько я знаю, это особенность Flash Virtual Machine, которая объявляет (выделяет память и т. Д.) Все переменные функции перед выполнением тела функции. Таким образом, объявление переменной где-то в функциональном блоке в коде ActionScript просто сообщает компилятору об объявлении переменной, и оно объявляет в начале функционального блока во время выполнения. Вот почему ваш код такой же, как:

public function foo() : void {
      var a : int = 3;
      a = 0;
 }

По той же причине появляется предупреждение компилятора, когда вы дважды объявляете некоторую переменную в теле функции.

0 голосов
/ 13 августа 2011

Для дальнейшей справки: http://wiki.joa -ebert.com / index.php / Local_Variables

...