restrictions on let declarations

Brendan Eich brendan at
Thu Jan 30 09:10:15 PST 2014

John Lenz wrote:
> 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.

It is -- special forms that have heads can bind in bodies. We see this 
with formal parameters to functions, also with the defunct let blocks 
and let expressions of ES4. ML has similar forms.

We made this block scoping, and how! Turns out Dart did the same. Each 
iteration gets a fresh binding. If there's a closure in the first part 
of the for(;;) head that captures the loop variable, it gets a "0th 
iteration" binding.


More information about the es-discuss mailing list