2011-08-12 9 views
11

inspirado en la pregunta int a[] = {1,2,}; Weird comma allowed. Any particular reason? Recordé una pregunta sobre la sintaxis en Actionscript de Adobe.Actionscript: ¿Por qué es posible asignar una variable antes de que se declare?

Por alguna razón, es posible (al menos en Flex 3) para asignar un valor a una variable antes de que se declaró:

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

¿Esto tiene sentido ..? ¿Es esto un error en el compilador Adobe FlexBuilder? ¿O es debido a tal vez algún legado de ediciones anteriores de Ecmascript?

Respuesta

17

Una implicación interesante de la falta de ámbito de nivel de bloque es que puede leer o escribir en una variable antes de que se declare, siempre que se declare antes de que termine la función. Esto se debe a una técnica llamada izado, lo que significa que el compilador mueve todas las declaraciones de variables a la parte superior de la función. Por ejemplo, el código siguiente se compila a pesar de que la función trace() inicial para la variable num sucede antes se declara la variable num ...

Actionscript 3.0 Docs - Variables (cotización encontró aproximadamente 2/3 abajo de la página)

+0

+1. muy interesante. no sabía sobre esto – TheDarkIn1978

+0

Gracias por la ayuda – paqogomez

3

Hasta donde yo sé, es la característica de Flash Virtual Machine que declara (asigna memoria, etc.) todas las variables de la función antes de la ejecución del cuerpo de la función. Entonces, declarar la variable en algún lugar del bloque de funciones en el código de ActionScript simplemente informa al compilador que declara la variable y lo declara al principio del bloque de funciones en el tiempo de ejecución. Es por eso que su código es el mismo que:

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

La misma razón tiene la advertencia del compilador cuando se declara una variable dos veces en el cuerpo de la función.

+0

¡Gracias a ambos! Aunque suena un poco raro para mí, finalmente sé por qué –

+0

@Mister Henson, entonces deberías aceptar una respuesta, a menos que estés esperando algo mejor :) – Peter

+0

@Peter: Ah ok, ya veo, estoy todavía aprendizaje;) –

Cuestiones relacionadas