Насколько я знаю, это особенность Flash Virtual Machine, которая объявляет (выделяет память и т. Д.) Все переменные функции перед выполнением тела функции. Таким образом, объявление переменной где-то в функциональном блоке в коде ActionScript просто сообщает компилятору об объявлении переменной, и оно объявляет в начале функционального блока во время выполнения. Вот почему ваш код такой же, как:
public function foo() : void {
var a : int = 3;
a = 0;
}
По той же причине появляется предупреждение компилятора, когда вы дважды объявляете некоторую переменную в теле функции.