while 循环显示哪些值?
重要程度: 4
对于每次循环,写出你认为会显示的值,然后与答案进行比较。
以下两个循环的 alert
值是否相同?
-
前缀形式
++i
:let i = 0; while (++i < 5) alert( i );
-
后缀形式
i++
let i = 0; while (i++ < 5) alert( i );
这个题目展现了 i++/++i 两种形式在比较中导致的不同结果。
-
从 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
。 -
从 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。