[javascript] Switch Case 문에서 중복 Const 선언 오류

다음 코드가 있는데 ‘Duplicate Declaration query_url’오류가 발생합니다.

  switch(condition) {
    case 'complex':
      const query_url = `something`;
      break;
    default:
      const query_url = `something`;
      break;
  }

query_url이 옳지 않은 두 번 선언된다는 것을 이해합니다. 그러나 나는 이것을 해결하는 방법을 모른다. 누군가이 작업을 수행하는 올바른 방법이 무엇인지 도와 주시겠습니까?



답변

각 경우에 동일한 변수를 다시 선언해야하는 경우 @Bergi의 답변을 참조하십시오.

query_url스위치 브랜치에 따라 여러 값을 가질 수 있다면 분명히 변수가 필요합니다 ( var또는로 선언하십시오 let).

const는 한 번 설정되고 그대로 유지됩니다.

let을 사용한 예제 사용

let query_url = '';
switch(condition) {
  case 'complex':
    query_url = `something`;
    break;
  default:
    query_url = `something`;
    break;
}


답변

케이스를 블록으로 포장 해보십시오.

switch(condition) {
  case 'complex': {
    const query_url = `something`;
    … // do something
    break;
  }
  default: {
    const query_url = `something`;
    … // do something else
    break;
  }
}


답변

나는 이러한 종류의 경우에 개인적으로 다음을 선호하고 남용하는 경향이 있습니다.

const query_url = (()=>
{
     switch(condition)
           case 'complex': return 'something';
           default       : return 'something-else';
})();

(이를 위해서는 ES6가 필요하거나 Node 4.x에서 “use-strict”를 선언해야합니다)

업데이트 : 또는 논리가 있는지 또는 간단한 할당인지에 따라 훨씬 더 간결합니다.

const query_url = {complex : 'something'}[condition] || 'something-else';

또한 물론 해당 switch 문에 포함 된 외부 논리의 양에 따라 달라집니다!


답변

const query_url={
  complex:'something complex',
  other:'other thing'
}[condition]

단점은 객체에 기본값을 가질 수 없으며 조건에 대한 추가 확인이 필요하다는 것입니다.


답변

{}스위치 케이스의 범위 를 지정하는 데 사용할 수 있습니다 .

귀하의 경우 에는 var가 존재하고 중괄호 사이에서 액세스 할 수있는 한 변수를 반환해야합니다.

 switch(condition) {
    case 'complex': {
      const query_url = `something`;
      return query_url;
    }
    default: {
      const query_url = `something`;
      return query_url;
    }
  }

사용하지 않을 경우returnlet query_url 스위치 문 위에 선언해야합니다 .


답변

switchreturn 문을 사용하여 함수에 넣으십시오 .

var condition;
function aSwitch(condition){
switch(condition) {
    case 'complex':
      return 'something';
    default:
      return 'something';
  }
}
const query_url = aSwitch(condition);


답변