回到课程

哪个值才是 while?

重要程度: 4

对于每次循环,写出你认为会显示的值,然后与答案进行比较。

两次循环的 alert 值是否相同?

  1. 前缀形式 ++i:

    let i = 0;
    while (++i < 5) alert( i );
  2. 后缀形式 i++

    let i = 0;
    while (i++ < 5) alert( i );

该任务演示在比较中 postfix/prefix 形式如何导致不同的结果。

  1. 从 1 到 4

    let i = 0;
    while (++i < 5) alert( i );

第一个值是 i=1,因为 ++i 首先递增 i 然后返回新值。因此先比较 1 < 5 然后 alert 显示 1

然后按照 2,3,4… —— 数值一个接着一个出现。比较总是使用递增值,因为 ++ 在变量前。

最终,i=4 递增到 5,当比较 while(5 < 5) 失败时,循环停止。所以没有显示 5。   2. 从 1 到 5

```js run
let i = 0;
while (i++ < 5) alert( i );
```

第一个值也是 i=1。前缀形式 i++ 递增 i 然后返回值,因此比较 i++ < 5 将使用 i=0 (与 ++i < 5 相反)。

alert 调用是独立的。这是在递增和比较之后执行的另一条语句。因此它得到了当前的 i=1

接下来是 2,3,4…

我们在 i=4 时暂停,前缀形式 ++i 会递增并在比较中使用 5。但我们这里还有后缀形式 i++。因此,它将 i 递增到 5,但返回旧值。因此实际比较的是 while(4 < 5) —— true,控制继续执行 alert

i=5 是最后一个值,因为下一步 while(5 < 5) 为 false。