2011-04-08 137 views
7

可能重複:
When is a do-while appropriate?的do-while語句

請問

有人能告訴我是什麼這兩個語句之間的區別是,當一個人應該比其他用?

var counterOne = -1; 

do { 
    counterOne++; 
    document.write(counterOne); 
} while(counterOne < 10); 

                                                                                                                                                                 

var counterTwo = -1; 

while(counterTwo < 10) { 
    counterTwo++; 
    document.write(counterTwo); 
} 

                                                                                                              http://fiddle.jshell.net/Shaz/g6JS4/

在這個時刻我沒有看到do聲明的點,如果它可以只是沒有具體說明的while語句內完成。

+0

http://stackoverflow.com/questions/1035229/when-is-a-do-while-appropriate – 2011-04-08 18:06:34

+0

@lwburk的重複:我不問其他循環('for','switch','if')。我想知道'while'和'do-while'之間的區別是什麼。 – Shaz 2011-04-08 18:09:59

+0

非sequitur。這正是這個問題的關鍵。 – 2011-04-08 18:14:14

回答

20

Do/While VS雖然是檢查條件的時間問題。

While循環檢查條件,然後執行循環。 Do/While執行循環,然後檢查條件。

例如,如果counterTwo變量爲10或更大,那麼do/while循環將執行一次,而您的正常while循環將不執行循環。

8

do-while保證至少運行一次。雖然while循環可能根本無法運行。

1

do語句通常會確保您的代碼至少執行一次(表達式評估結束時),同時在開始時進行評估。

1

比方說,不管條件如何,您都希望至少處理循環內的塊一次。

1

do while在塊運行後檢查條件。 while在運行前檢查條件。這通常用於代碼至少運行一次的情況。

1

如果您將counterTwo值作爲另一個函數的返回值,那麼在第一種情況下可以安全地使用if語句。

例如

var counterTwo = something.length; 

while(counterTwo > 0) { 
    counterTwo--; 
    document.write(something.get(counterTwo)); 
} 

var counterTwo = something.length; 

if(counterTwo < 0) return; 

do 
{ 
     counterTwo--; 
    document.write(something.get(counterTwo)); 
} while(counterTwo > 0); 

第一種情況下是有用的,如果一個現有的陣列中處理數據。 第二種情況是非常有用的,如果你 「收集」 的數據:

do 
{ 
    a = getdata(); 
    list.push(a); 
} while(a != "i'm the last item");