2017-04-19 11 views
-3

下記のJSスニペットを参照してください。 case: 2が一致しない場合でも、1と2の両方が印刷されます。 私はこれを防ぐためにbreak;を置くことができますが、私はこれの背後にある本当の論理を理解したいと思います。これは、マッチがない場合にブロックを実行する意味がないためです。なぜ `switch`、` case`は一致しなくてもコードブロックを実行しますか?

var a = 1 
 
switch(a){ 
 
    case 1: 
 
\t \t console.log(1) 
 
    case 2: 
 
\t \t console.log(2) 
 
}

+4

['break'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/break)...は休憩を意味しません。 –

+4

'switch'は* fall-through *ロジックを使用します。最初の一致するケースから開始するすべての処理を開始します。それがどれほど有用かは議論の余地がありますが、それは永遠に以来多くの言語で設計されてきた方法です。同じコードブロックを複数のケースで実行したい場合は、 – deceze

+3

を参考にしてください。 –

答えて

4

スイッチのcase文は後藤のように動作します。つまり、ラベルに一致した場合は、ラベルに直接ジャンプします。コードフローは、その後には影響を受けません。

+0

それはそれを置くのすてきな方法です。 「よく管理された」Gotoの種類。 –

+0

IIRCは当初、一致するメモリアドレスにジャンプし、その中のすべてを単に実行しました。これは、一致する 'case'の後のすべてのコード行を意味します。今日これはおそらくは関連性がそれほどありませんが、その振る舞いは依然として変わりません。 – deceze

関連する問題