<div dir="ltr">In my model <div><br></div><div>if (y) let x = 42</div><div><br></div><div>is equivalent to </div><div><br></div><div>if (y) {</div><div>  let x = 42</div><div>}</div><div><br></div><div>and it is clear "x" in "alert(x)" is 0;</div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 30, 2014 at 7:54 AM, Brendan Eich <span dir="ltr"><<a href="mailto:brendan@mozilla.com" target="_blank">brendan@mozilla.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">John Lenz wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Generally, I've always thought of:<br>
<br>
"if (x) ..." as equivalent to "if (x) { ... }"<br>
</blockquote>
<br></div>
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".<br>
<br>
The restriction avoids nonsense such as<br>
<br>
let x = 0; { if (y) let x = 42; alert(x); }<br>
<br>
What pray tell is going on here, in your model?<span class="HOEnZb"><font color="#888888"><br>
<br>
/be<br>
</font></span></blockquote></div><br></div>