2016-03-02 89 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] 

缺點是,你不能有對象的默認值,你需要有條件的附加檢查。