2016-03-02 11 views
31

Ho il seguente codice e ottengo l'errore "Dichiarazione duplicata query_url".Errore duplicazione dichiarazione Const nell'informativa caso switch

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

Comprendo che query_url viene dichiarato due volte che non è corretto. Ma non so come risolvere questo. Qualcuno può aiutarmi su quale dovrebbe essere il modo corretto per farlo funzionare?

+2

Dove è necessario utilizzare 'query_url'? – Bergi

+1

Se è necessario usare 'query_url' al di fuori dell'istruzione' switch', non è possibile usare 'const'. –

+0

Vedere risposta @Bergi per la risposta più utile (non è sicuro il motivo per cui è nascosto nella lista quando ha di gran lunga più upvotes) –

risposta

6

se query_url può avere più valori in funzione del ramo interruttore ovviamente bisogno di una variabile (dichiarare con var o let).

const è impostato una volta e rimane in questo modo.

esempio di utilizzo con cerchiamo

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

Grazie. questo ha funzionato per me. – asanas

+1

Semplicemente non è vero. verifica la risposta @bergi. – Kuf

+2

@Kuf. Sì, il wrapping dell'istruzione case in un blocco risolve l'errore dichiarato in precedenza. Ora prova ad accedere a 'query_url' al di fuori dell'istruzione switch. http://jsbin.com/givavumolu/edit?html,js,console,output Allora goditi il ​​tuo downvote – eltonkamami

153

Provare avvolgendo i casi in blocchi:

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

Non è sicuro perché è stato downvoted, risolve l'errore? – Bergi

+11

Questa è una soluzione davvero intelligente, +1. – towerofnix

+1

Umm, non 'query_url' si limiterà al blocco in cui è definito, quale tipo di sconfigge l'intero scopo di assegnarlo? –

1

basta mettere la switch in una funzione con alcune dichiarazioni di ritorno:

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

se non si usa "strict strict"; 'alcune cose strane si verificheranno con il tuo codice. ogni dichiarazione di ritorno sta creando/assinging a un url di query a variabili globali. – eltonkamami

+0

@antoniskamamis Modificato.Grazie per il suggerimento :) – Zakaria

+0

devi solo restituire il valore senza un incarico che creerà un globale o causerà un errore – eltonkamami

7

Io personalmente preferisco (e tendono ad abusare) quanto segue in questo tipo di casi:

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

(questo richiede ES6 o dichiarando "usare-strict" nel Nodo 4.x)

Aggiornamento: In alternativa, molto più compatto a seconda se c'è qualche logica lì o se è un compito semplice:

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

Inoltre, ovviamente, dipende dalla quantità di logica esterna incorporata in tali istruzioni switch!

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

Lo svantaggio è che non è possibile avere un valore predefinito con oggetto, è necessario avere un ulteriore controllo delle condizioni.

Problemi correlati