这个IIFE交换机语句会导致不必要的开销吗?

时间:2016-06-01 11:05:07

标签: javascript switch-statement ecmascript-6 iife

我喜欢使用const,我喜欢switch语句。

注意:以下只是一个简化的例子。每种情况下的代码都稍微复杂一些,返回的对象是JSX组件。

考虑一下:

let retval // can't declare as const!
switch (value) {
  case 'a':
    retval = 'aa'
  break
  case 'b':
    retval = 'bb'
  break
  case 'c':
    retval = 'cc'
  break
  case 'd':
    retval = 'dd'
  break
  default:
    retval = 'xx'
}

// mistakenly by purpose change retval here..
retval = function nope(){ return null }

但我 DO 想要使用我的consts,与此相比:

const retval = (() => {
  switch (value) {
    case 'a':
      return 'aa'
    case 'b':
      return 'bb'
    case 'c':
      return 'cc'
    case 'd':
      return 'dd'
    default:
      return 'xe'
  }
})()

retval = null // nope you are safe here!, raises error

是否会造成不必要的开销? ......或者引擎会获得它的优势吗?

1 个答案:

答案 0 :(得分:2)

您可以使用具有默认值的对象而不是switch语句。

const retval = {a: 'aa', b: 'bb', c: 'cc', d: 'dd'}[value] || 'xe';

或使用函数,它刚刚执行

var value = 'd';
const retval = ({a: () => 'aa', b: () => 'bb', c: () => 'cc'}[value] || (() => 'xe'))();
console.log(retval);