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。