Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个IIFE开关语句是否会导致不必要的开销?_Javascript_Switch Statement_Ecmascript 6_Iife - Fatal编程技术网

Javascript 这个IIFE开关语句是否会导致不必要的开销?

Javascript 这个IIFE开关语句是否会导致不必要的开销?,javascript,switch-statement,ecmascript-6,iife,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':

我喜欢使用
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 }
但与此相比,我确实想使用常量:

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

这会导致不必要的开销吗。。。或者引擎会利用它吗?

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

const retval = {a: 'aa', b: 'bb', c: 'cc', d: 'dd'}[value] || 'xe';
或者使用函数,该函数仅在最后执行

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

控制台日志(retval)无论如何,在某些情况下,这是一个简洁的解决方案。但这仍然意味着一切都被处理并存储在内存中,对吗?我正在构建一些复杂的JSX组件并返回它们。我不需要构建所有组件,只需要构建正确的组件。使用这种方法将首先构建它们,对吗?这取决于内容。如果是一个函数,那么只有想要的才能执行。事实上,我在这些情况下使用函数,所以这种方法真的很酷!请在你的答案上加一条注释,这样我就可以给出+1。无论如何,我还是想听听关于我的两个问题的话,这确实让我感兴趣,包括这种方法和普通的
开关之间的区别,特别是在处理速度、有效性和资源方面。