2017-08-13 30 views
1

所以我的問題基本上與switch語句有關。爲什麼爲什麼這兩個語句相當於

switch (foo) { 
    case 1: case 2: 
     bar(); 
     break; 
} 

一樣:

if (foo == 1 || foo == 2) { 
    bar(); 
} 

在我看來,與switch語句,在案例1中的代碼會執行,並根據情況2的代碼將被忽略。請向我解釋爲什麼不是這樣。

+0

執行bar()的什麼語言爲Y你指的是這裏嗎?請添加相關標籤。 –

+0

你看過交換機是如何工作的嗎?在我所知的每種語言中,除非用「break」分隔,否則每個case都是* not *分開執行。 '情況1'「落入」情況2。 – Carcigenicate

+0

假設使用Java,請到此處搜索頁面以查找「fall through」:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Carcigenicate

回答

0

當評估case語句時,代碼將fall through,直到塊終止(通常通過break語句)。那麼,第一個片斷的語義如下:

  • 如果foo2,執行bar()再突破。
  • 如果foo1,執行以下case 1:的塊,其是空的(即,什麼也不做),然後繼續(落空)到塊以下case 2:,詳細在先前的點
  • 對於任何其他值,什麼也不做(因爲沒有匹配case塊。

正如你所看到的,這相當於在情況foo12

0

break;聲明完全負責切換開關代碼塊。

沒有break;語句的switch語句將以非常奇怪的順序執行。

switch (2) { 
    case 2: 
     alert("hello"); 
    case 3: 
     alert("goodbye"); 
     break; 
    case 4: 
     alert("will never show"); 
    } 

JavaScript的switch語句:https://www.w3schools.com/js/js_switch.asp

0

在每個case語句的末尾添加break;從然後執行它下面的一切停止的情況下。否則,它通過。