Not sometimes. Local vars are always hoisted from the block where they
are declared to the scope of the entire function.

 

As Ecmascript requires!  : )

 

Gordon Smith

Adobe Flex SDK Team

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Maciek Sakrejda
Sent: Friday, August 15, 2008 12:54 PM
To: [email protected]
Subject: Re: [flexcoders] Method variable scoping problem with Flex
compiler

 

This is variable hoisting in action:

http://docs.huihoo.com/web/js/es4/core/definitions.html#hoist
<http://docs.huihoo.com/web/js/es4/core/definitions.html#hoist> 

I can't really find a clearer explanation, but the gist of it is that
variable definitions are sometimes moved to the parent block, and
sometimes this results in the sort of weird behavior you're seeing.

That's the how, but I don't really know the why--anyone more savvy about
hoisting care to enlighten the list?

-- 
Maciek Sakrejda
Truviso, Inc.
http://www.truviso.com <http://www.truviso.com> 

-----Original Message-----
From: toofah_gm <[EMAIL PROTECTED] <mailto:garym%40byu.edu> >
Reply-To: [email protected]
<mailto:flexcoders%40yahoogroups.com> 
To: [email protected] <mailto:flexcoders%40yahoogroups.com> 
Subject: [flexcoders] Method variable scoping problem with Flex compiler
Date: Fri, 15 Aug 2008 19:43:09 -0000

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