AFAIK, It's different because that's the way it works in LISP by way of Scheme, JavaScript, and ECMAScript.
-Josh On Fri, Dec 5, 2008 at 12:15 PM, Michael Prescott < [EMAIL PROTECTED]> wrote: > *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 [email protected] <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 >> > >> >> > > -- "Therefore, send not to know For whom the bell tolls. It tolls for thee." Like the cut of my jib? Check out my Flex blog! :: Josh 'G-Funk' McDonald :: 0437 221 380 :: [EMAIL PROTECTED] :: http://flex.joshmcdonald.info/ :: http://twitter.com/sophistifunk

