你应该在 switch case 循环中使用 break 吗?

Ka *_*Mok -1 javascript loops switch-statement

以 FizzBu​​zz 为例,for 循环中的这个 switch case 在每个 case 之后使用 break。

for (num = 1; num <= 100000; num ++) {
    switch (true) {
        case (num % 15 == 0):
            console.log("FizzBuzz");
            break;
        case (num % 3 == 0):
            console.log("Fizz");
            break;
        case (num % 5 == 0):
            console.log("Buzz");
            break;
        default:
            console.log(num);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Mozilla 的文档中,他们说...

与每个 case 标签相关联的可选 break 语句确保程序在执行匹配的语句后中断 switch 并在 switch 之后的语句处继续执行。如果省略 break ,程序将在 switch 语句中的下一个语句处继续执行。

我假设它们的意思是当脚本检查 num % 15 == 0 时,如果没有中断并且即使它匹配 true,它也会转到 num % 3 ==0 等等。然后我用 100,000 个数字做了两个测试。一种有休息时间,一种没有休息时间。

我发现休息和不休息之间大约有 2 秒的差异,休息时间越来越短。但这已经过多次迭代了。

我的问题是,对于大多数构建小型应用程序的开发人员来说,在他们的循环中使用中断真的很重要吗?这是习惯和偏好的问题吗?想法?

Cal*_*son 8

当caseswitch 语句中的条件满足时,它将执行该 switch 语句中的所有代码块,直到遇到退出命令(认为break或return)。因此,break它不仅改变了性能速度,还改变了功能。

一个简单的方法来思考switch语句作为替代对链if-else语句。

您的switch代码可以很容易地编写

if (num % 15 == 0) {
   console.log("FizzBuzz");
} else if (num % 3 == 0) {
    console.log("Fizz");
} else if (num % 5 == 0) {
    console.log("Buzz");
} else {
    console.log(num);
}
Run Code Online (Sandbox Code Playgroud)

如果您删除这些break;语句,您将改变代码的实际运行方式。它会表现得更像

if (num % 15 == 0) {
   console.log("FizzBuzz");
}

if (num % 3 == 0 || num % 15 == 0) {
    console.log("Fizz");
}

if (num % 5 == 0 || num % 3 == 0 || num % 15 == 0) {
    console.log("Buzz");
} 

console.log(num);
Run Code Online (Sandbox Code Playgroud)

主要区别是缺乏else条件。