2016-03-02 10 views
31

次のコードがあり、「重複宣言query_url」というエラーが表示されます。エラースイッチのステートメントで重複するConst宣言

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

私はquery_urlが2回正しく宣言されていることを理解しています。しかし、私はこれを解決する方法を知らない。誰かがこの仕事をする正しい方法でなければならないことについて助けてもらえますか?

+2

ここで 'query_url'を使う必要がありますか? – Bergi

+1

'switch'文の外側で' query_url'を使う必要があるなら 'const'を使うことはできません。 –

+0

最も有用なレスポンスについて@Bergiの回答を参照してください。なぜ、これが最も多くのアップフォースを持っているのかはわかりません。 –

答えて

6

query_urlは明らかにスイッチ支店にお応じて複数の値を持つことができる場合変数が必要です(varまたはletで宣言してください)。

constは一度設定され、そのままになります。

​​

(これはES6を必要とするか、「使用厳しい」と宣言:例これらの種類には、次の私は個人的に好み(と虐待する傾向がある)

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

ありがとうございます。これは私のために働いた。 – asanas

+1

単に真実ではありません。 @bergiの答えをチェックしてください。 – Kuf

+2

@Kuf。はい、case文を1つのブロックにラップすると、以前に宣言されたエラーが解決されます。今度は、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

これがなぜ落とされたのか分かりませんが、それはエラーを解決しますか? – Bergi

+11

これは本当に巧妙な解決策、+1です。 – towerofnix

+1

うん、 'query_url'は定義されているブロックに限定されません。それはどのような目的にそれを割り当てるのですか? –

1

ただ、いくつかのreturn文と機能であなたのswitchを置く:

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

厳密に ";使用しないでください";あなたのコードでいくつかの奇妙なことが起こります。各return文は、グローバル変数query urlを作成したり、assingしたりしています。 – eltonkamami

+0

@antoniskamamisが編集されました。ヒント:ありがとうヒント – Zakaria

+0

グローバルを作成するか、エラーが発生する割り当てなしで値を返すだけです – eltonkamami

7

てみましょうと

使用例しかし、そこにロジックがあるかどうか、または単純な割り当ての場合は、よりコンパクトになる:

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

もちろん、これらのswitch文に埋め込まれた外部ロジックの量にも依存します。

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

欠点は、オブジェクトにデフォルトを設定できないことです。条件の追加チェックが必要です。

関連する問題