Strict mode recap
lhansen at adobe.com
Wed Apr 2 18:12:13 PDT 2008
> -----Original Message-----
> From: zeppieri at gmail.com [mailto:zeppieri at gmail.com] On
> Behalf Of Jon Zeppieri
> Sent: 2. april 2008 19:06
> To: Lars Hansen
> Cc: es4-discuss at mozilla.org
> Subject: Re: Strict mode recap
> On 4/2/08, Lars Hansen <lhansen at adobe.com> wrote:
> > >
> > > Lars, does this mean that expr::[expr] can't introduce
> > lexical
> > bindings? Or: in strict mode, it can't, but in > standard it can?
> > It can't introduce bindings; it's just a name.
> I meant something like:
> var foo::[bar] = baz;
> My objection to expr::[expr] in earlier messages was based on
> the assumption that these computed names could be used on the
> left-hand side of an assignment expression -- which, I'm
> pretty sure, is syntactically valid.
But that by itself can't introduce bindings (except global ones).
> So, for example:
> var foo = "hello";
> null::["foo"] = "goodbye";
> print(foo); // prints "goodbye"
> But I guess there are two cases: one where a new binding
> would be introduced and another where the expression would
> evaluate to an already bound name (as in the previous example).
> So... are either of those cases legal?
If you want to introduce a new binding then you have to do eg
ns var x = E
to introduce ns::x, and ns has to reference a namespace
definition, so it's not variable. Nor is the x, obviously.
But in that case:
var v1 = ns
var v2 = "x"
v1::[v2] = 20
updates ns::x, AFAIK. Nothing you can't do with lexically
More information about the Es4-discuss