*Why* it's different I can't tell you, but if you're being regularly
surprised, it sounds like you might benefit from skimming through the
language reference.  This behavior is described on the
Variables<http://livedocs.adobe.com/flex/3/html/help.html?content=03_Language_and_Syntax_07.html#118946>page
of help resource center, under 'Understanding variable scope'.

>From there (this may scare you even more!):

*ActionScript variables, unlike variables in C++ and Java, do not have
block-level scope. ... An interesting implication of the lack of block-level
scope is that you can read or write to a variable before it is declared, as
long as it is declared before the function ends. This is because of a
technique called hoisting, which means that the compiler moves all variable
declarations to the top of the function.*

On Thu, Dec 4, 2008 at 5:31 PM, toofah_gm <[EMAIL PROTECTED]> wrote:

>   I came across another scoping issue today that scared me. I sure wish
> that the scoping in the ActionScript language worked the same way C++,
> C#, Java, and others work!
>
> Here's the code:
>
> for each (var o:Object in myArray)
> {
> var myProblemObject:ProblemObject;
> if (some condition)
> {
> myProblemObject = new ProblemObject();
> ... more code here ...
> }
> ... still more code here...
>
> if (myProblemObject)
> {
> ... do some stuff ...
> }
> }
>
> In this code myProblemObject is NULL when things start out...great!
> The problem comes after an instance of myProblemObject gets created.
> Every time through the loop after this myProblemObject is no longer
> NULL. This is not consistent with any other language that I have
> worked with and is therefore not obvious to the developer working with
> the code.
>
> Why is myProblemObject not reset each time through the loop? It is a
> variable declaration.
>
> Gary
>
> --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>,
> "toofah_gm" <[EMAIL PROTECTED]> wrote:
> >
> > It seems to me and my co-workers that the Flex compiler is broken
> when
> > it comes to local variable scoping within methods.
> >
> > For example:
> >
> > for (var i:int=0; i<count; i++)
> > {
> > // do something
> > }
> >
> > for (var i:int=0; i<count; i++)
> > {
> > // do something else
> > }
> >
> > This gives a compiler warning stating that 'i' is already defined.
> > But in every other language that I have used, this is completely
> > valid. Yes 'i' was defined above, but 'i' should only be scoped
> > within the 'for' loop and should be invalid outside of it.
> >
> >
> >
> > Another example:
> >
> > if (x)
> > {
> > var myArray:Array = new Array();
> > // do more stuff
> > }
> >
> > myArray.push("some data");
> >
> > This one compiles, when I believe that it shouldn't. myArray should
> > only be defined within the 'if' statement. If you don't go into the
> > 'if' statement you have a problem here.
> >
> >
> > Does anyone understand why the Flex compiler allows this? Is this
> > just a BUG with the compiler?
> >
> > Anyway, this is just driving me a little crazy. ;)
> >
> > Gary
> >
>
>  
>

Reply via email to