<div dir="ltr">Consider the function and class declarations in these positions to be equivalent to:<div><br></div><div>    for (let x = function(){}; ...</div><div><br></div><div>and</div><div><br></div><div>    for (let x = class(){}; ...</div>
<div><br></div><div>respectively.</div><div><br></div><div> </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 5, 2014 at 8:32 AM, Will Ray <span dir="ltr"><<a href="mailto:wray167@gmail.com" target="_blank">wray167@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Mark, could you explain how the condition and iteration statements in the for loop interact with such an initialization? I agree that banning these seems like the clearer way to go.<br>
</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Jun 5, 2014 at 10:17 AM, Mark S. Miller <span dir="ltr"><<a href="mailto:erights@google.com" target="_blank">erights@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div dir="ltr">Why not accept these as for-loop initializations, so that x actually has that function and that class as its initial value in the first iteration of the loop? To me, that's the least surprise. Since this is a position in which some declarations are accepted, anything there that looks like a declaration should be a declaration.<div>


<br></div><div>However, I agree that banning these is much less surprising than allowing them as expressions rather than declarations.</div><div><br></div></div><div class="gmail_extra"><div><div><br><br><div class="gmail_quote">

On Thu, Jun 5, 2014 at 7:58 AM, Andreas Rossberg <span dir="ltr"><<a href="mailto:rossberg@google.com" target="_blank">rossberg@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">C-style for-loops allow declarations as init statements, but only some<br>
of them. Yet, the others (function and class) are actually<br>
syntactically legal in that position as well, because they are simply<br>
parsed as expressions. Consider:<br>
<br>
  let x = 0<br>
  for (let x = 1; ;) x  // 1<br>
  for (const x = 1; ;) x  // 1<br>
  for (function x(){}; ;) x  // 0<br>
  for (class x(){}; ;) x  // 0<br>
<br>
I think these latter two examples violate the principle of least<br>
surprise. I wonder if it wouldn't be cleaner to rule them out, by<br>
imposing the same lookahead restrictions on for-loop init expressions<br>
as there are for expression statements.<br>
<br>
The one caveat is that for function, that would actually be a breaking<br>
change, but is it likely to be a real world one?<br>
<br>
What do you think?<br>
<br>
/Andreas<br>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span><font color="#888888">-- <br>    Cheers,<br>    --MarkM
</font></span></div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>    Cheers,<br>    --MarkM
</div>