循环会显示哪些值?
重要性:4
对于每次循环迭代,写下它输出的值,然后将其与解决方案进行比较。
两个循环都alert
相同的值,还是不同?
-
前缀形式
++i
let i = 0; while (++i < 5) alert( i );
-
后缀形式
i++
let i = 0; while (i++ < 5) alert( i );
此任务演示了后缀/前缀形式在比较中使用时如何导致不同的结果。
-
从 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
没有显示。 -
从 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)
- 为真,控制流程继续执行alert
。i = 5
是最后一个值,因为在下一步while(5 < 5)
为假。