This is by design.  ECMAScript block scoped declarations generally conform to 
the principle that within a single block or statement a name may have only a 
single binding. For example, 

```js
let x=0;
{
  let x = x+1;  //access to uninitialized variable error because both the RHS 
and LHS refer to the inner x
                     //which has not yet been initialized when the RHS is 
evaluated
}

```

The same principle also applies to 
```js
let n = {a:[]};
for (let n of n.a) ;
```

although the actual scoping of the `for` statement is more complex. Basically, 
such `for` statements consider all names bound by the `let` part of of the 
`for` header to be undefined while the `of` expression is being evaluated. 

This is done to avoid any confusion about which `n` the expression references. 
Such confusion is avoid by all references to the `let` bound names from the RHS 
errors.

Allen



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to