2013-06-26 23 views
2

在JavaScript中相同的功能,我尝试写做了类似下面的switch语句 -的Javascript switch语句EXCUTE一些根据情况

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

有没有更好的方式来做到这一点?

+0

我选择了Frits给出的答案,因为它在“案例”不是数字时会起作用。 –

回答

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

-1用于建议切换到新手。 – c69

+0

我不确定我会想到这个,很酷。不知道为什么这是downvoted要么 – Ian

+1

@伊恩,因为它脆弱,被认为是一种不好的做法。另外,通常还有更干净的方法来做到这一点。看更长的讨论:[这里](http://stackoverflow.com/questions/188461/switch-statement-fallthrough-should-it-be-allowed)和[附近](http://programmers.stackexchange.com/questions/116221/fall-through-switch-statements) – c69

2

弗里茨面包车坎彭的答案是关闭你所描述的完全相同的功能。当我使用开关时,我总是有缺陷。如果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(); 
+0

您的第一个选择是迄今为止最好的选择:它清楚地说明了每个功能的意图/条件。 – acdcjunior

+1

除了他们错误的顺序。 – Barmar

+0

这个假设值切换总是数字(第一个例子) – Ian

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++) { 
+0

我认为你不应该在调度表中放入'functionZ',在'for'后调用它,代替循环。它取决于'n'的可能值,如果'n'可以是5这个代码是不等价的。 – Halcyon

+0

如果需要,你可以在循环之前加上'n'。 – Barmar

+0

但是你需要确保'functionZ' _always_被调用。 – Halcyon

0

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

写你的职责是这样的:

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

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

// etc 

那么你并不需要一个下通,你可以有一个开关的情况下休息。

仅仅因为你定义你的功能,如functionWfunctionX你需要打电话给他们以这种方式并不意味着你的函数组合必然是