restrictions on let declarations

Brendan Eich brendan at mozilla.com
Thu Jan 30 08:13:18 PST 2014


John Barton wrote:
>
> On Thu, Jan 30, 2014 at 7:54 AM, Brendan Eich <brendan at mozilla.com 
> <mailto:brendan at mozilla.com>> wrote:
>
>     John Lenz wrote:
>
>         Generally, I've always thought of:
>
>         "if (x) ..." as equivalent to "if (x) { ... }"
>
>
>     let and const (and class) are block-scoped. {...} in your "if (x)
>     {...}" is a block. An unbraced consequent is not a block, and you
>     can't have a "conditional let binding".
>
>     The restriction avoids nonsense such as
>
>     let x = 0; { if (y) let x = 42; alert(x); }
>
>     What pray tell is going on here, in your model?
>
>
> I'm with John: the alert should say 0 and I can't see why that is not 
> obvious.

Interesting!

You don't want the alert to show undefined, so the extent of the inner 
binding in your model is the unbraced consequent of the  "if".

That is not "block scope" in any plain sense.

/be


More information about the es-discuss mailing list