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。无论如何,我还是想听听关于我的两个问题的话,这确实让我感兴趣,包括这种方法和普通的开关之间的区别,特别是在处理速度、有效性和资源方面。