2

在 JavaScript 中,我正在尝试编写一个 switch 语句,它执行以下操作 -

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

有一个更好的方法吗?

4

4 回答 4

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();
于 2013-06-26T17:02:38.680 回答
0

考虑迭代调度表,而不是 a 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++) {
于 2013-06-26T17:03:16.793 回答
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();等等......

于 2013-06-26T16:50:32.040 回答
0

我只是想到了一个不同的解决方案。

像这样编写你的函数:

function functionW() {
    // do stuff
    functionX();
}

function functionX() {
    // do stuff
    functionY();
}

// etc

然后你就不需要失败了,你可以有一个中断的开关盒。

仅仅因为您定义了诸如等之类的函数functionW并且functionX需要以这种方式调用它们并不意味着您的函数组合一定是好的

于 2013-06-26T21:59:52.513 回答