2011-08-12 14 views
11

inspirowane pytaniem int a[] = {1,2,}; Weird comma allowed. Any particular reason? Zapamiętałem pytanie dotyczące składni w Adobe Actionscript.Actionscript: Dlaczego można przypisać zmienną, zanim zostanie zadeklarowana?

Z jakiegoś powodu to jest możliwe (przynajmniej w Flex 3), aby przypisać wartość zmiennej przed jej oświadczył:

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

Czy to żadnego sensu ..? Czy jest to błąd w kompilatorze Adobe FlexBuilder? Czy to może być spowodowane starszymi wersjami Ecmascript?

Odpowiedz

17

Interesującą konsekwencją braku zakresu blokowego jest możliwość odczytywania lub zapisywania zmiennej przed jej zadeklarowaniem, o ile zostanie zadeklarowana przed zakończeniem funkcji. Dzieje się tak z powodu techniki zwanej podnoszeniem, co oznacza, że ​​kompilator przenosi wszystkie deklaracje zmiennych na górę funkcji. Na przykład, następujący kod kompiluje chociaż początkowa funkcja trace() dla zmiennej num dzieje przed zmienna num jest zadeklarowana ...

Actionscript 3.0 Docs - Variables (cytat znaleziono około 2/3 w dół strony)

+0

+1. bardzo interesujące. nie wiedziałem o tym. – TheDarkIn1978

+0

Dzięki za pomoc – paqogomez

3

O ile mi wiadomo, jest to funkcja maszyny wirtualnej Flash, która deklaruje (przydzielać pamięć itd.) Wszystkie zmienne funkcji przed wykonaniem działania funkcji. Zatem deklarowanie zmiennej gdzieś w bloku funkcyjnym w kodzie ActionScript powoduje tylko zgłoszenie kompilatora do zadeklarowania zmiennej i deklaruje na początku bloku funkcyjnego w czasie wykonywania. Dlatego kod jest taki sam jak:

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

Z tego samego powodu ma ostrzeżenia kompilatora kiedy zadeklarować jakąś zmienną dwa razy w ciele funkcji.

+0

Dziękuję wam obojgu! Chociaż brzmi to dla mnie trochę dziwnie, w końcu znam powód –

+0

@Mister Henson, wtedy powinieneś zaakceptować odpowiedź, chyba że czekasz na coś lepszego :) – Peter

+0

@Peter: Ah ok Widzę, thx Wciąż jestem nauka;) –

Powiązane problemy