我有以下代码,我收到错误'重复声明query_url'。
switch(condition) {
case 'complex':
const query_url = `something`;
break;
default:
const query_url = `something`;
break;
}
我知道query_url被声明了两次,这是不对的。但我不知道如何解决这个问题。有人可以帮助确定这项工作的正确方法吗?
答案 0 :(得分:263)
尝试用块包装案例:
switch(condition) {
case 'complex': {
const query_url = `something`;
… // do something
break;
}
default: {
const query_url = `something`;
… // do something else
break;
}
}
答案 1 :(得分:11)
在这种情况下,我个人更喜欢(并且倾向于滥用)以下内容:
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语句中嵌入的外部逻辑的数量!
答案 2 :(得分:7)
如果query_url
可以有多个值,具体取决于切换分支,显然您需要一个变量(使用var
或let
声明)。
const设置一次并保持这种状态。
使用let
的示例用法let query_url = '';
switch(condition) {
case 'complex':
query_url = `something`;
break;
default:
query_url = `something`;
break;
}
答案 3 :(得分:2)
您可以使用{}
来确定开关盒的大小。
对于您的情况,您需要返回变量,只要var存在并且可以在花括号之间访问即可:
switch(condition) {
case 'complex': {
const query_url = `something`;
return query_url;
}
default: {
const query_url = `something`;
return query_url;
}
}
如果您不使用return
,则必须在switch语句上方声明let query_url
。
答案 4 :(得分:1)
只需将switch
放入带有一些返回语句的函数中:
var condition;
function aSwitch(condition){
switch(condition) {
case 'complex':
return 'something';
default:
return 'something';
}
}
const query_url = aSwitch(condition);
答案 5 :(得分:1)
const query_url={
complex:'something complex',
other:'other thing'
}[condition]
缺点是,您不能使用对象默认,您需要对条件进行额外检查。