On Aug 24, 2008, at 3:40 PM, Mark S. Miller wrote:
Interesting point. We may have let property semantics again needlessly
corrupt variable semantics.
That's a recurring risk due to the spec's modeling scopes via objects
(a botch that most of us involved all along regret, but hard to fix
in any kind of 3.x spec delta).
Non-strict assignment to a non-writable
property must fail silently for legacy compatibility. But I don't
think there's any corresponding legacy constraint on assignment to a
const variable. I agree that this should throw regardless of
strictness.
Yes, it would be best to throw always -- this is easy to get right
now, while we have the chance with ES3.1, for variables that do not
map in the spec or implementations to properties.
But const at top level makes a global object property. And thanks to
the spec's abusing objects for scopes, it seems to happen at function
body top-level in function activations. If you have
function foo(x, z) {
const y = x;
return eval(z);
}
The spec talks about the activation object for foo having properties
x and z, and any extension a la 3.1 would probably have to do
likewise for const. Otherwise you're making a new kind of scope, not
visible to eval'ed code.
/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss