2016-03-02 115 views
31

我有以下代码,并且出现'重复声明query_url'错误。错误在开关中声明重复的Const声明Case声明

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

据我所知,query_url得到两次宣布,这是不正确的。但我不知道如何解决这个问题。有人可以请帮助什么应该是正确的方式来完成这项工作?

+2

你需要在哪里使用'query_url'? – Bergi

+1

如果您需要在switch语句之外使用'query_url',则不能使用'const'。 –

+0

请参阅@Bergi回答最有用的回复(不知道为什么它在收到最多赞誉时被列在名单中) –

回答

6

如果query_url可以根据交换机分支显然你多个值需要一个变量(声明为varlet)。

const设置一次并保持这种状态。

例如使用与让

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

谢谢。这对我有效。 – asanas

+1

只是不正确。检查@bergi的答案。 – Kuf

+2

@Kuf。是在一个块中包装case语句解决了之前声明的错误。现在尝试在switch语句之外访问'query_url'。 http://jsbin.com/givavumolu/edit?html,js,console,output然后享受你的downvote – eltonkamami

153

尝试包裹的情况下,以块:

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

不确定为什么这是downvoted,它解决了错误? – Bergi

+11

这是一个非常聪明的解决方案,+1。 – towerofnix

+1

嗯,不会'query_url'被限制在它定义的块中,哪种类型会失去分配给它的全部目的? – 2016-03-02 14:46:24

1

只要把你的switch的功能与一些return语句:

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

如果你不''使用严格的“;'你的代码会发生一些奇怪的事情。每个return语句都创建/分配一个全局变量查询url。 – eltonkamami

+0

@antoniskamamis编辑。感谢您的提示:) – Zakaria

+0

你只需要返回值,而无需创建全局或导致错误的任务 – eltonkamami

7

我个人比较喜欢(而且往往滥用)在这些各种各样的案件如下:

​​

(这需要ES6或宣称“使用严格”在节点4.x中)

更新:或者,更加紧凑取决于是否存在任何逻辑或者是否是简单的赋值:

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

此外,当然,还取决于嵌入在这些switch语句中的外部逻辑的数量!

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

缺点是,你不能有对象的默认值,你需要有条件的附加检查。