From: Sam Tobin-Hochstadt

> On Mon, Mar 18, 2013 at 8:40 AM, Andreas Rossberg <rossb...@google.com> wrote:
>>
>> Nothing, but Sam probably meant to write:
>>
>> if (something_random()) xxx = 7;
>> xxx; // ReferenceError or not?
> 
> Right, I was confusing the problem this code describes, which is what I think 
> Mark meant, with the problem of the global object being on the scope chain.
> 
>>> It actually demonstrates how the situation is exactly the same with 
>>> *explicit* global variable creation. Strict mode does nothing to change the 
>>> result.
>>>
>>> Similarly, in case 3, the code could be `delete window.xxx` and we still 
>>> cannot statically predict whether there's a `ReferenceError` on the 
>>> subsequent line or not. Again, strict mode does not change the result.
>>
>> That is true, and the proper answer is that the global object should be on 
>> the above list as well. Not sure why Mark did not include it.
> 
> I believe that Mark would distinguish 1-4, which are fixed by strict mode, 
> from the global object, which is the remaining issue in ES5.

Last time this came up:

http://www.mail-archive.com/es-discuss@mozilla.org/msg18463.html

it was clarified that the global object is not a static scoping violation, 
since it's the top-most in the scope chain. Thus we know that every binding 
that's not in the nested function environments must be on the global object—or 
not exist.

That's the essence of my confusion. Cases 1 and 3 do not change things. That 
is, `xxx = 7` versus `window.xxx = 7` doesn't change where we determine `xxx` 
to be: it must be global (if it exists at all). Similarly, `delete xxx` versus 
`delete window.xxx` doesn't change that `xxx` must be global or not exist. And 
strict mode prohibits the former of these two forms, but doesn't prohibit the 
latter, and so seems to have no impact.

Now, if `with` and sloppy `eval` weren't removed, I could see the argument, at 
least for `delete`:

http://www.mail-archive.com/es-discuss@mozilla.org/msg18466.html

but with those two gone (i.e. with 2 and 4 gone), 1 and 3 seem to not matter.

> But only Mark can answer this for sure.

Indeed :)
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to