for-loops and declaration-like init expressions
Andreas Rossberg
rossberg at google.com
Thu Jun 5 08:59:32 PDT 2014
On 5 June 2014 17:17, Mark S. Miller <erights at google.com> wrote:
> 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.
Yes, that would be an obvious extension. I did not propose it because
it's a less benign change (in the spec) and these cases don't seem
particularly useful in practice. That said, I'd be happy with making
that change as well, on the grounds that it is more regular.
/Andreas
> However, I agree that banning these is much less surprising than allowing
> them as expressions rather than declarations.
>
>
>
> On Thu, Jun 5, 2014 at 7:58 AM, Andreas Rossberg <rossberg at google.com>
> wrote:
>>
>> C-style for-loops allow declarations as init statements, but only some
>> of them. Yet, the others (function and class) are actually
>> syntactically legal in that position as well, because they are simply
>> parsed as expressions. Consider:
>>
>> let x = 0
>> for (let x = 1; ;) x // 1
>> for (const x = 1; ;) x // 1
>> for (function x(){}; ;) x // 0
>> for (class x(){}; ;) x // 0
>>
>> I think these latter two examples violate the principle of least
>> surprise. I wonder if it wouldn't be cleaner to rule them out, by
>> imposing the same lookahead restrictions on for-loop init expressions
>> as there are for expression statements.
>>
>> The one caveat is that for function, that would actually be a breaking
>> change, but is it likely to be a real world one?
>>
>> What do you think?
>>
>> /Andreas
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>
>
>
>
> --
> Cheers,
> --MarkM
More information about the es-discuss
mailing list