alatar, создание переменной происходит один раз в самом начале функции (независимо от места объявления var).
Скомпилируйте:

Код AS3:
trace(n); //NaN
var n:Number = 5;
Результат NaN получается из-за того, что происходит отделение "создания переменной" и "фактического присвоения ей значения".
В байткоде приведенного выше примера должен быть скомпилированный аналог:

Код AS3:
var n:Number;
trace(n); //NaN
n = 5;