Allen Wirfs-Brock wrote:
On Dec 15, 2012, at 9:21 AM, David Bruant wrote:

Hi,

On public-script-coord, Boris Zbarsky showed an example [1] where a global 
variable is var-defined and then observed to be absent from the global object 
it was attached to (because the WindowProxy has changed of underlying window 
object).

The careful ECMAScript 5.1 reader knows that global var-defined variables are 
supposed to be reflected as own non-configurable properties of the global 
object. Reflecting the property as such commits the object to keep the property 
forever which, as we've seen in Boris example, is not compatible with how the 
web works.

I don't think it'll be possible to change how global objects in same-origin 
iframes work nor relax ES5 invariants; so my proposal is to have 
var/let/const/function global declarations *reflected* as configurable, but 
acting as if they were not.
This would also require a couple of changes in the spec and consequently JS 
engines and certainly test262.
Other proposals welcome, of course.

Note that in ES6 global bindings introduced by  let/const/class/import bound 
using a declarative environment record  and will not be reflected at all on the 
global object.

That still leaves any issues relating to var and function declarations.

Reflecting var and function bindings on window (or |this| or |self| or other aliases) as configurable properties, but refusing to allow reconfiguration, is a solution, however distasteful. Allowing configuration is no good, of course.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to