Javascript switch语句根据具体情况执行一些相同的功能

时间:2013-06-26 16:49:54

标签: javascript switch-statement

在JavaScript中,我正在尝试编写一个类似于以下内容的开关语句 -

swtich(n)
{
   case 1:
      functionW(); functionX(); functionY(); functionZ();
      break;
   case 2:
      functionX(); functionY(); functionZ();
      break;
   case 3:
      functionY(); functionZ();
      break;
   default:
      functionZ();
      break;
}

有更好的方法吗?

4 个答案:

答案 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
}

如果n1,则会执行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

然后你不需要穿透,你可以有一个 断开的开关案例。

仅仅因为您定义了functionWfunctionX等函数,需要以这种方式调用它们并不意味着您的函数组成必然是