We are in rapid-release hell/heaven.

This means errata can be issued, and engines can implement the better resolution for those errata, compared to what the last major-version _de jure_ spec mandated.

Why not?

/be

Adam Klein wrote:
Note that this behavior in v8/Chrome is only about sloppy mode. In strict mode, v8 implements the ES6 spec (and we'll likely have support for lexical declarations in sloppy mode soon).

Though I personally agree that the top-level lexical scoping in ES6 seems unfortunate.

On Mon, Aug 31, 2015 at 9:53 AM, Matthew Robb <matthewwr...@gmail.com <mailto:matthewwr...@gmail.com>> wrote:

    Personally I am a fan of Chrome's CURRENT solution:
    ```
    Uncaught SyntaxError: Block-scoped declarations (let, const,
    function, class) not yet supported outside strict mode
    ```


    - Matthew Robb

    On Mon, Aug 31, 2015 at 12:08 PM, Jason Orendorff
    <jason.orendo...@gmail.com <mailto:jason.orendo...@gmail.com>> wrote:

        Hi everyone. Can we talk about the global lexical tier?

        This was a mistake, a real blunder. We all should have known
        better.
        An extensible intermediate scope implies dynamic scoping. The
        referent
        of an identifier can change only once, but it can change. It's
        like an
        implicit `with` block around *all code*.

        This pattern for declaring variable in multiple scripts won't work
        with let/const:

            var MyES3Module = MyES3Module || {};

        There's no workaround except "keep using var".

        It's now possible to get a binding permanently wedged, which
        is bad for a REPL:

            js> let z = Maht.PI;  // oops, typo
            ReferenceError: Maht is not defined
            js> z
            ReferenceError: binding is not initialized: "z"
            js> z = 1;
            ReferenceError: binding is not initialized: "z"
            js> delete z;
            false
            js> let z = 1;
            SyntaxError: redeclaration of variable: "z"

        For a single name to have two global bindings, both mutable,
        is astonishing.

        All of this was unnecessary. What's the benefit to users? We ran
        roughshod over existing practice, invariants, and expectations in
        order to obtain a kind of self-consistency for `let` that
        users don't
        expect or even care about.

        We should have just made toplevel let/const/class create global
        properties, like var. This is how it was proposed originally
        and how
        Babel implements it today. For SpiderMonkey, switching to the
        worse,
        less user-friendly way without regressing performance is
        time-consuming.

        We knew all this. We didn't evaluate it correctly. What we
        particularly missed is that we already had modules as the way
        forward
        to a nice toplevel lexical tier, and weird half measures for
        scripts
        were pointless.

        -j
        _______________________________________________
        es-discuss mailing list
        es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
        https://mail.mozilla.org/listinfo/es-discuss



    _______________________________________________
    es-discuss mailing list
    es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
    https://mail.mozilla.org/listinfo/es-discuss


_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to