W3C home > Mailing lists > Public > public-script-coord@w3.org > January to March 2012

Re: variable declarations shadowing named properties on window

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Wed, 04 Jan 2012 13:41:54 -0500
Message-ID: <4F049D72.4010302@mit.edu>
To: Travis Leithead <travis.leithead@microsoft.com>
CC: Ojan Vafai <ojan@chromium.org>, Cameron McCormack <cam@mcc.id.au>, "public-script-coord@w3.org" <public-script-coord@w3.org>, Allen Wirfs-Brock <allen@wirfs-brock.com>, Ian Hickson <ian@hixie.ch>
On 1/4/12 1:21 PM, Travis Leithead wrote:
>> -----Original Message-----
>> From: Boris Zbarsky [mailto:bzbarsky@MIT.EDU]
>>
>> On 1/4/12 3:24 AM, Ojan Vafai wrote:
>>> IE and Opera already do this and have done so for a long time, right?
>>
>> They've allowed var to shadow the frame names, right?
>>
>> Have they actually put the frame names somewhere on the proto chain
>> other than the global itself?  Doing that changes behaviors other than
>> that of var....
>
> The described behavior has been in IE for a while. In Trident, frame references are just another global scope polluter, but with higher priority. The var declarations are assigned the undefined value (I believe), and so they shadow everything else in the lookup order.

var declarations don't do any value assignment, per spec.  They just 
define a property if one isn't there already.  Try this testcase:

   <script>
     x = 5;
   </script>
   <script>
     var x;
     alert(x);
   </script>

Does that alert 5 in IE?  If so, how is this case different from the GSP 
case in IE?  In both cases, when the var declaration happens, you need 
to check whether the object already has an own property with that name....

Or does IE put all its GSPs, including frame names, on the proto chain 
and not on the object itself?

-Boris
Received on Wednesday, 4 January 2012 19:02:33 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 8 May 2013 19:30:05 UTC