2016-06-01 3 views
2

나는 const을 좋아하고 switch 문을 좋아한다.이 IIFE 스위치 문으로 인해 불필요한 오버 헤드가 발생합니까?

참고 : 다음은 단순화 된 예입니다. 각 경우의 코드는 다소 복잡하고 반환 된 객체는 JSX 구성 요소입니다.

이를 생각해 내 consts를 사용하려면

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 

은 불필요한 오버 헤드를 일으키는 원인이되어 있습니까? ... 또는 엔진이 그것을 활용할 것인가?

답변

2

switch 문 대신 기본값이있는 개체를 사용할 수 있습니다. 경우에 따라 -

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

하거나 끝에 함수와

이 깔끔한 해결책 어쨌든

+0

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

실행. 그러나 여전히 모든 것은 처리되고 메모리에 저장된다는 것을 의미합니다. 일부 복잡한 JSX 컴포넌트를 빌드하고 리턴한다. 모든 구성 요소를 구축 할 필요는 없습니다. 올바른 구성 요소 만 구축하면됩니다. 이 방법을 사용하면 모든 것을 먼저 구축 할 수 있습니다. – Qwerty

+1

은 내용에 따라 다릅니다. if가 함수라면, 원하는 것만 실행될 수 있습니다. –

+0

사실 이러한 경우에 함수를 사용하기 때문에이 방법이 정말 멋지다! 답을 적어주세요. +1 할 수 있습니다. 어쨌든 나는 아직도이 두 가지 질문에 대해 한 마디의 말을 듣고 싶다.이 접근법과 일반적인 '전환'의 차이, 특히 처리 속도, 유효성 및 자원 측면에서이 점을 고려해 보라. – Qwerty

관련 문제