On Aug 26, 2015, at 3:17 PM, Mark S. Miller wrote:
> On Wed, Aug 26, 2015 at 2:55 PM, Kevin Gibbons <[email protected]>
> 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.
A fix for this would be in 8.1.1.4.5, insert between the current steps 4 and 5:
4.5 If S is true, then
a. Let stillHasBinding be ObjRec.HasBinding(N).
b. ReturnIfAbrupt(stillHasBinding).
c. If stillHasBinding is false, throw a ReferenceError exception.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss