Strict mode recap

Lars Hansen 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
scoped eval.

--lars



More information about the Es4-discuss mailing list