在 Switch Case 语句中重复 Const 声明的错误

我有以下代码,并且得到了错误“ DuplicationDeclaration query _ url”。

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

我知道 query _ url 被声明了两次,这是不对的。但我不知道该怎么解决。有没有人能告诉我怎么做才是正确的?

33037 次浏览

Try wrapping the cases in blocks:

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

Just put your switch in a function with some return statements :

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

if you need to redeclare the same variable in each case see @Bergi 's answer bellow

if query_url can have multiple values depending on the switch branch obviously you need a variable ( declare either with var or let ).

const is set once and stays that way.

example usage with let

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

I personally prefer (and tend to abuse) the following in these sorts of cases:

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

(this requires ES6 or declaring "use-strict" in Node 4.x though)

Update: Alternatively, much more compact depending on if there is any logic there or if it's a simple assignment:

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

Also, of course, depends on the amount of outside-logic embedded in those switch statements!

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

The drawback is,you can't have default with object,you need to have addition check of condition.

You can use {} to scope your switch case.

For your case, you need to return the variable as long as the var exists and is accessible between curly braces:

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

If you won't use return, you must declare a let query_url above your switch statement.