在JavaScript中,我正在尝试编写一个类似于以下内容的开关语句 -
swtich(n)
{
case 1:
functionW(); functionX(); functionY(); functionZ();
break;
case 2:
functionX(); functionY(); functionZ();
break;
case 3:
functionY(); functionZ();
break;
default:
functionZ();
break;
}
有更好的方法吗?
答案 0 :(得分:2)
Frits van Campen的回答是关闭了您描述的相同功能。当我使用带有/不带穿透的开关时,我总是有虫子。如果n是我使用的数字:
if(n >= 1){functionW();}
if(n >= 2){functionX();}
if(n >= 3){functionY();}
functionZ();
(我删除了第二个答案,因为Barmar表示更好。)
修改强>
可以修改它以使用非数字:
var test = false
if(n === 1 || test){test = true; functionW();}
if(n === 2 || test){test = true; functionX();}
if(n === 3 || test){test = true; functionY();}
functionZ();
答案 1 :(得分:0)
删除break
案例将通过。
请务必明确指出不想要break
,因为它可能看起来像是一个错误。
switch(n)
{
case 1:
functionW();
// dont break
case 2:
functionX();
// dont break
case 3:
functionY();
// dont break
default:
functionZ();
// dont break
}
如果n
为1
,则会执行functionW()
,然后落实到case 2
并执行functionX();
,依此类推......
答案 2 :(得分:0)
而不是switch
,请考虑迭代调度表:
var functions = [ functionW, functionX, functionY, functionZ ];
for (i = n; i < functions.length; i++) {
functions[i]();
}
在这种情况下,n
应该从0开始而不是1.如果functionZ()
实际上是针对所有高于3的值,则可以在循环开始时限制n
:
for (i = (n >= functions.length ? functions.length-1 : n); i < functions.length; i++) {
答案 3 :(得分:0)
我只想到了一个不同的解决方案。
写下你的函数:
function functionW() {
// do stuff
functionX();
}
function functionX() {
// do stuff
functionY();
}
// etc
然后你不需要穿透,你可以有一个 断开的开关案例。
仅仅因为您定义了functionW
,functionX
等函数,和需要以这种方式调用它们并不意味着您的函数组成必然是好