Итак, у нас есть 3 вида синтаксиса:
// 1. Variable declaration.
var a:int;
// 2. Assign value to variable.
a = 0;
// 3. Declare variable and assign value in one go.
var b:int = 1;
Хитрость в том, что в объявлении переменной AS3 НЕ операция.Это конструкция, которая сообщает компилятору, что вы собираетесь использовать переменную с определенным именем и типом в данном контексте ( в качестве члена класса или в качестве переменной временной шкалы, или в качестве локальной переменной внутри метода ).Буквально не имеет значения, где в коде вы объявляете свои переменные.Я должен признать, что AS3 ужасен с этой точки зрения.Следующий код может выглядеть странно, но синтаксически правильно.Давайте прочитаем и поймем, что он делает и почему.
// As long as they are declared anywhere,
// you can access these wherever you want.
i = 0;
a = 0;
b = -1;
// The 'for' loop allows a single variable declaration
// within its parentheses. It is not mandatory that
// declared variable is an actual loop iterator.
for (var a:int; i <= 10; i++)
{
// Will trace lines of 0 0 -1 then 1 1 0 then 2 2 1 and so on.
trace(a, i, b);
// You can declare a variable inside the loop, why not?
// The only thing that actually matters is that you assign
// the 'a' value to it before you increment the 'a' variable,
// so the 'b' variable will always be one step behind the 'a'.
var b:int = a;
a++;
}
// Variable declaration. You can actually put
// those even after the 'return' statement.
var i:int;
Позвольте мне повторить это.Место, где вы объявляете свои переменные, не имеет значения, просто факт, который вы делаете вообще.Объявление переменной не является операцией.Тем не менее, присвоение значенияВаш код на самом деле выглядит следующим образом:
function bringMe(e:Event):void
{
// Lets explicitly declare variables so that assigning
// operations will come out into the open.
var i:int;
var score:int;
for (i = 1; i <= 10; i++)
{
// Without the confusing declaration it is
// obvious now what's going on here.
score = 0;
score++;
// Always outputs 1.
trace(score);
// Outputs values from 1 to 10 inclusive, as expected.
trace(i);
}
}