Assignment of global variables deleted by their RHS in strict mode
Mark S. Miller
erights at google.com
Wed Aug 26 22:17:39 UTC 2015
On Wed, Aug 26, 2015 at 2:55 PM, Kevin Gibbons <kevin at shapesecurity.com>
wrote:
> See the following test262 test:
> https://github.com/tc39/test262/blob/master/test/language/expressions/assignment/S11.13.1_A5_T5.js
> (and related tests with update / compound assignment).
>
> In short, it is possible to have a Reference to a global variable which
> has been deleted. Normally, bare assignments to undeclared variables in
> strict mode cause ReferenceErrors. However, calling PutValue on a reference
> to a global variable which has been deleted since the reference was created
> does not throw a ReferenceError in strict mode, even though, *at the time
> of writing*, that variable does not exist.
>
> As far as I can tell, this is true in ES5 as well as ES6, but none of {V8,
> SpiderMonkey, JavaScriptCore, Nashorn} get it right. This is consistent and
> makes sense, but is it intentional?
>
Hmmm, interesting. It was not the intention of the strict mode design to
allow this to slip by without a thrown error. If we had explicitly
considered this issue during the early strict mode design, we definitely
would have made this a thrown error of some sort. ReferenceError sounds
good to me, but I can't say that we would not have decided on TypeError.
Either seems plausible enough.
I agree that the silent failure implied by the current spec is buggy.
Please file a bug against the ES6 spec. We should correct this at least in
the errata.
Thanks for raising this!
And thanks to André Bargull for writing that test case! I wish I was aware
of it earlier.
--
Cheers,
--MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150826/e7d0ed3a/attachment-0001.html>
More information about the es-discuss
mailing list