restrictions on let declarations

John Lenz concavelenz at gmail.com
Thu Jan 30 08:39:11 PST 2014


How did "let x" in for-loops land:

for (let x = 1; x < 10 ; i++) {
  // is "x" a fresh binding for every iteration?
}

This wouldn't be "block" scoping either.


On Thu, Jan 30, 2014 at 8:13 AM, Brendan Eich <brendan at mozilla.com> wrote:

> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140130/1d9fb1ed/attachment.html>


More information about the es-discuss mailing list