如何从switch语句中获取返回值?

foo*_*bar 24 javascript

在chrome的控制台中,当我键入:

> switch(3){default:"OK"}
  "OK"
Run Code Online (Sandbox Code Playgroud)

所以看起来switch语句有一个返回值.但当我这样做时:

> var a = switch(3){default:"OK"}
Run Code Online (Sandbox Code Playgroud)

它抛出语法错误"Unexpected Token switch"

是否可以捕获交换机的return语句?

hel*_*dre 39

那是因为当你将它放入Chrome控制台时,你就会将其短路.它只是打印'OK',因为它达到了默认情况,而不是实际返回的东西.

如果你想要返回一些东西,把它贴在一个函数中,并在默认情况下返回'OK'.

function switchResult(a){
    switch(a){
        default: 
            return "OK";
    }
}

var a = switchResult(3);
Run Code Online (Sandbox Code Playgroud)

  • JavaScript中的函数式编程+1 (7认同)

小智 9

也许有趣的是,;break;如果将它包装在函数中,则不需要杂乱的语句.(如heloandre所述)

function switchResult(a){   
    switch(a){   
        case 1: return "FOO";
        case 2: return "BAR";
        case 3: return "FOOBAR";
        default: return "OK";      
    }
}
var a = switchResult(3);
Run Code Online (Sandbox Code Playgroud)

  • 不,`switch`不需要`break;`语句的原因是因为每个`case`都执行一次“ return”,因此不会陷入下一个`case'中。函数包装与它无关。 (5认同)

小智 8

ES6允许您使用立即调用的lambda来执行此操作:

const a = (() => {
  switch(3) {
    default: return "OK";
  }
})();
Run Code Online (Sandbox Code Playgroud)

  • 这里确实没有必要使用 lambda,ES5 支持立即调用的函数就很好: console.log((function() { switch(3) { default: return "OK"; } })()); (6认同)