Why is "export default var a = 1;" invalid syntax?

Rick Waldron waldron.rick at gmail.com
Wed Feb 18 14:05:20 PST 2015


On Wed Feb 18 2015 at 4:40:34 PM Jesse McCarthy <
es-discuss-2015-02 at jessemccarthy.net> wrote:

> > Jesse, you can do:
> > `export default class Foo extends Backbone {}`
>
> Ok, thanks. The empty block is required?


Yes, just like:

  function Foo() {}

Where the braces are the syntactic boundary around the FunctionBody; the
braces here:

class Foo {}

...Are the syntactic boundary around the ClassBody. ClassBody has
"optional" (present or not) semantics, defined at
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation
Steps 8 & 9

Rick




> The part after `extends` is just an
> expression that evaluates to a function, right? So I could do this right
> (where Backbone.Model.extend() returns a function)?:
>
> export default class Klass extends Backbone.Model.extend() {}
> Klass.prototype.whatever = whatever;
>
> Thanks,
> Jesse
>
> ----- Original Message -----
> From: "caridy" <caridy at gmail.com>
> To: "Jesse McCarthy" <es-discuss-2015-02 at jessemccarthy.net>
> Cc: <es-discuss at mozilla.org>
> Sent: Tuesday, February 17, 2015 5:38 PM
> Subject: Re: Why is "export default var a = 1;" invalid syntax?
>
>
> Jesse, you can do:
>
> `export default class Foo extends Backbone {}`
>
> in case you want to reference to the exported class in the body of the
> module, or you can do:
>
> `export default class extends Backbone {}`
>
> /caridy
>
> > On Feb 17, 2015, at 4:47 PM, Jesse McCarthy
> > <es-discuss-2015-02 at jessemccarthy.net> wrote:
> >
> > Re:
> > https://esdiscuss.org/topic/why-is-export-default-var-a-1-invalid-syntax
> >
> > I find myself wanting to do this kind of thing with a function returned
> > from a function, e.g. when using Backbone, and it seems silly that I
> > can't:
> >
> > export default var Klass = Backbone.Model.extend();
> > Klass.prototype.whatever = whatever;
> > // ...
> >
> > For that use case will the following be functionally identical? Any
> > gotchas with circular dependencies or anything?
> >
> > A)
> > var Klass = Backbone.Model.extend();
> > Klass.prototype.whatever = whatever;
> > export default Klass;
> >
> > B)
> > var Klass = Backbone.Model.extend();
> > Klass.prototype.whatever = whatever;
> > export { Klass as default };
> >
> > C)
> > var Klass = Backbone.Model.extend();
> > export default Klass;
> > Klass.prototype.whatever = whatever;
> >
> > D)
> > var Klass = Backbone.Model.extend();
> > export { Klass as default };
> > Klass.prototype.whatever = whatever;
> >
> > If I was willing to use class syntax could I do this?
> >
> > export default class Klass extends Backbone.Model.extend();
> > Klass.prototype.whatever = whatever;
> >
> >
> > Glen Huang said:
> >> I think this is illegal, should be {a: a}
> >
> > Sorry, I'm probably missing something obvious, but what is this referring
> > to?
> >
> > _______________________________________________
> > es-discuss mailing list
> > es-discuss at mozilla.org
> > https://mail.mozilla.org/listinfo/es-discuss
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150218/9a0d3381/attachment-0001.html>


More information about the es-discuss mailing list