所以我的問題基本上與switch語句有關。爲什麼爲什麼這兩個語句相當於
switch (foo) {
case 1: case 2:
bar();
break;
}
一樣:
if (foo == 1 || foo == 2) {
bar();
}
在我看來,與switch語句,在案例1中的代碼會執行,並根據情況2的代碼將被忽略。請向我解釋爲什麼不是這樣。
所以我的問題基本上與switch語句有關。爲什麼爲什麼這兩個語句相當於
switch (foo) {
case 1: case 2:
bar();
break;
}
一樣:
if (foo == 1 || foo == 2) {
bar();
}
在我看來,與switch語句,在案例1中的代碼會執行,並根據情況2的代碼將被忽略。請向我解釋爲什麼不是這樣。
當評估case
語句時,代碼將fall through,直到塊終止(通常通過break
語句)。那麼,第一個片斷的語義如下:
foo
是2
,執行bar()
再突破。foo
是1
,執行以下case 1:
的塊,其是空的(即,什麼也不做),然後繼續(落空)到塊以下case 2:
,詳細在先前的點case
塊。正如你所看到的,這相當於在情況foo
是1
或2
。
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
在每個case語句的末尾添加break;
從然後執行它下面的一切停止的情況下。否則,它通過。
執行
bar()
的什麼語言爲Y你指的是這裏嗎?請添加相關標籤。 –你看過交換機是如何工作的嗎?在我所知的每種語言中,除非用「break」分隔,否則每個case都是* not *分開執行。 '情況1'「落入」情況2。 – Carcigenicate
假設使用Java,請到此處搜索頁面以查找「fall through」:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – Carcigenicate