<div dir="ltr">Classes are more similar to function expressions which do have an internal const binding.<br><br>One way to desugar ClassDeclaration is to desugar it into a let binding for a ClassExpression. [1]<div><br></div><div>let Foo = class Foo extends expr {};</div><div><br></div><div>I would prefer if we didn't change the spec, not because I think it is too late (it is) but because having an internal const binding is good because then you can rely on that it will never change.</div><div><br></div><div>[1] This is actually what we do in V8.</div></div><br><div class="gmail_quote">On Mon, Mar 2, 2015 at 10:12 PM Mark S. Miller <<a href="mailto:erights@google.com">erights@google.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>All else being equal, your suggestion seems like the obviously right thing, on at least consistency and least surprise grounds.</div><div><br></div>I know we discussed this. Anyone remember why we didn't do what Jason suggests? My memory of counter-arguments here is blank.<div><br><div><br><div><div><br></div></div></div></div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 2, 2015 at 1:07 PM, Jason Orendorff <span dir="ltr"><<a href="mailto:jason.orendorff@gmail.com" target="_blank">jason.orendorff@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Classes are specified to have an immutable inner binding even if they<br>
also declare a mutable lexical binding in the enclosing scope:<br>
<br>
    class Foo {<br>
        foo() {<br>
            // immutable inner binding 'Foo' is in scope here<br>
        }<br>
    }<br>
    // mutable lexical binding 'Foo' is in scope here<br>
<br>
Having two bindings can be tricky. Suppose I then do this:<br>
<br>
    Foo = wrapConstructorWithExtraLogging(Foo);<br>
<br>
Now the two bindings have different values. If one of Foo's methods<br>
does `new Foo`, we don't get the extra logging.<br>
<br>
Can we go back to having classes do what functions do? A single<br>
function never introduces two bindings; rather a named function<br>
expression has only the immutable inner binding and a function<br>
declaration only declares a variable.<br>
<br>
-j<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br><br clear="all"><div><br></div></div><div class="gmail_extra">-- <br><div>    Cheers,<br>    --MarkM</div>
</div>
______________________________<u></u>_________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/<u></u>listinfo/es-discuss</a><br>
</blockquote></div>