回到课程

while 循环显示哪些值?

重要程度: 4

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

以下两个循环的 alert 值是否相同?

  1. 前缀形式 ++i:

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

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

这个题目展现了 i++/++i 两种形式在比较中导致的不同结果。

  1. 从 1 到 4

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

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

    然后按照 2, 3, 4… —— 数值一个接着一个被显示出来。在比较中使用的都是递增后的值,因为 ++ 在变量前。

    最终,i = 4 时,在 ++i < 5 的比较中,i 值递增至 5,所以 while(5 < 5) 不符合循环条件,循环停止。所以没有显示 5

  2. 从 1 到 5

    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 会递增 i 并在比较中使用新值 5。但我们这里是后缀形式 i++。因此,它将 i 递增到 5,但返回旧值。因此实际比较的是 while(4 < 5) —— true,程序继续执行 alert

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