为什么`switch`,`case`即使不匹配也会执行代码块?

问题描述:

考虑下面的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

考虑如果你想多个案例做相同的代码块... –

交换机case语句就像一个goto。这意味着如果你与一个标签相匹配,你就直接跳到它。之后你的代码流不受影响。

+0

这是一个很好的方式。一种“精心控制”的转向。 –

+0

IIRC最初跳转到匹配的内存地址,然后简单地执行其中的所有内容;这意味着匹配'case'后的每一行代码。今天,这可能不再具有很大的相关性,但行为仍然存在。 – deceze