【问题标题】:Is this IIFE switch statement causing unnecessary overhead?这个 IIFE switch 语句是否会导致不必要的开销?
【发布时间】:2016-06-01 11:05:07
【问题描述】:

我喜欢使用constswitch 语句。

注意:以下只是一个简化的示例。每种情况下的代码都稍微复杂一些,返回的对象是一个 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 }

但我确实想使用我的常量,比较一下:

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

是否会造成不必要的开销? ...或者引擎会利用它吗?

【问题讨论】:

    标签: javascript switch-statement ecmascript-6 iife


    【解决方案1】:

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

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

    或者with函数,就是在最后执行

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

    【讨论】:

    • 无论如何,这是一个很好的解决方案——在某些情况下。但是,这仍然意味着一切都被处理并存储在内存中,对吧?我正在构建一些复杂的 JSX 组件并返回它们。我不需要构建所有组件,只需构建正确的组件即可。使用这种方法将首先构建它们,对吗?
    • 这取决于内容。如果 is 是一个函数,那么只有想要的才能被执行。
    • 我实际上在这些情况下使用函数,所以这种方法真的很酷!请在您的答案中添加注释,以便我给它+1。无论如何,我仍然想听听我的两个问题,这真的让我很感兴趣,包括这种方法与普通的switch 之间的区别,尤其是在处理速度、效率和资源方面。
    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多