返回課程

while 迴圈顯示哪些值?

重要性:4

對於每個迴圈反覆運算,寫下它輸出的值,然後與解答進行比較。

兩個迴圈都會 alert 相同的值嗎?

  1. 前置形式 ++i

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

    let i = 0;
    while (i++ < 5) alert( 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 遞增為 5,比較 while(5 < 5) 失敗,迴圈停止。因此不會顯示 5

  2. 從 1 到 5

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

    第一個值仍然是 i = 1i++ 的後置形式會先遞增 i,然後傳回值,因此比較 i++ < 5 會使用 i = 0(與 ++i < 5 相反)。

    但是 alert 呼叫是分開的。這是另一個陳述式,會在遞增和比較之後執行。因此它會取得目前的 i = 1

    然後依序顯示 2, 3, 4…

    讓我們在 i = 4 時停止。前置形式 ++i 會遞增它,並在比較中使用 5。但是這裡我們有後置形式 i++。因此它會將 i 遞增為 5,但傳回舊值。因此比較實際上是 while(4 < 5),為真,控制權會傳遞到 alert

    i = 5 是最後一個,因為在下一步 while(5 < 5) 為假。