I don't get it. Please give an example of the per-iteration initialization
in the while loop... (the for-loop version before `;` does it before
iteration, not per-iteration)

On Mon, 26 Mar 2018 at 07:20 Isiah Meadows <[email protected]> wrote:

> As a counterpoint, Rust and Swift are the opposite: it's only defined
> in the consequent branch, not the alternate. So it could go both ways.
>
> But if a value is useful in both branches, I'd prefer to just define
> the variable in a separate statement, to clarify that it's useful in
> both branches (explicit > implicit). To take your example, I'd prefer
> instead to do this:
>
> ```js
> let foo = getFoo()
>
> if (foo.isReady()) {
>     foo.start()
> } else {
>     foo.wait()
> }
> ```
> -----
>
> Isiah Meadows
> [email protected]
>
> Looking for web consulting? Or a new website?
> Send me an email and we can get started.
> www.isiahmeadows.com
>
>
> On Sun, Mar 25, 2018 at 5:42 AM, MaĆ«l Nison <[email protected]> wrote:
> > C++ defines it as being available in both branches, I think we try to
> share
> > the same behavior. Keep in mind that it will useful when the check is on
> > something different than existence :
> >
> > if (let foo = getFoo() ; foo.isReady())
> >     foo.start();
> > else
> >     foo.wait();
> >
> > On Wed, Mar 21, 2018, 10:27 PM Isiah Meadows <[email protected]>
> wrote:
> >>
> >> My implication was that it'd only be available in the `if` (if
> >> declared with `let`/`const`).
> >> -----
> >>
> >> Isiah Meadows
> >> [email protected]
> >>
> >> Looking for web consulting? Or a new website?
> >> Send me an email and we can get started.
> >> www.isiahmeadows.com
> >>
> >>
> >> On Wed, Mar 21, 2018 at 6:25 PM, Sebastian Malton <
> [email protected]>
> >> wrote:
> >> > Sorry if I missed a message but would such an initialization be only
> >> > available in the first `if` block or also in the subsequent `else if`
> and
> >> > `else` blocks?
> >> >
> >> > Sebastian Malton
> >> >
> >> >
> >> >   Original Message
> >> > From: [email protected]
> >> > Sent: March 21, 2018 6:18 PM
> >> > To: [email protected]
> >> > Cc: [email protected]; [email protected]
> >> > Subject: Re: Proposal: if variable initialization
> >> >
> >> > I'm personally very much *for* this `if (var ...; cond) { ... }`
> >> > syntax. I couldn't tell you how many times I would've liked something
> >> > to that effect, since that's probably one of my biggest areas of
> >> > boilerplate.
> >> >
> >> > I would also be in favor of `if (var ...) { ... }` as a shorthand that
> >> > guards `!= null` the expression result (pre-match), since that's about
> >> > 90% of my use cases for it. There *is* a potential area of ambiguity
> >> > in sloppy for `if ( let [ x ] = y )`, since that would be currently
> >> > parsed as `var tmp = y; let[x] = tmp; if (tmp) { ... }`, but I doubt
> >> > breaking that would be of much web compat risk. (A similar ambiguity
> >> > existed with `for (let [`, but that break didn't cause many issues.)
> >> > -----
> >> >
> >> > Isiah Meadows
> >> > [email protected]
> >> >
> >> > Looking for web consulting? Or a new website?
> >> > Send me an email and we can get started.
> >> > www.isiahmeadows.com
> >> >
> >> >
> >> > On Wed, Mar 21, 2018 at 2:47 PM, Mike Samuel <[email protected]>
> >> > wrote:
> >> >>
> >> >>
> >> >> On Wed, Mar 21, 2018 at 1:27 PM, Sebastian Malton
> >> >> <[email protected]>
> >> >> wrote:
> >> >>>
> >> >>> Because block-level scoping is a very good way to avoid certain bugs
> >> >>> and
> >> >>> is easier to reason about. Especially when considering project
> >> >>> successors.
> >> >>
> >> >>
> >> >> +1.  function-scoped variables in loop bodies caused tons of bugs
> >> >> before
> >> >> let-scoped variables and were a main motivating case.
> >> >>
> >> >> var i;
> >> >> for (i = 0; i < arr.length; ++i) {
> >> >>   f(function () { /* Do something with */ arr[i]; });
> >> >> }
> >> >>
> >> >> vs
> >> >>
> >> >> for (let i = 0; i < arr.length; ++i) {
> >> >>   f(function () { /* Do something with */ arr[i]; });
> >> >> }
> >> >>
> >> >> Yes, linters got pretty good at finding uses of closed-over variables
> >> >> modified in a loop, but the workarounds were not ideal.
> >> >>
> >> >> var i;
> >> >> for (i = 0; i < arr.length; ++i) {
> >> >>   f(function (i) { return function () { /* Do something with */
> arr[i];
> >> >> }
> >> >> }(i));
> >> >> }
> >> >>
> >> >> Block scoping is just better for code that uses loops, variables, and
> >> >> function expressions.
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> es-discuss mailing list
> >> >> [email protected]
> >> >> https://mail.mozilla.org/listinfo/es-discuss
> >> >>
> >> _______________________________________________
> >> es-discuss mailing list
> >> [email protected]
> >> https://mail.mozilla.org/listinfo/es-discuss
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to