可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have the following code and I get the error 'Duplicate Declaration query_url'.
switch(condition) { case 'complex': const query_url = `something`; break; default: const query_url = `something`; break; }
I understand that query_url is getting declared twice which isn't right. But i don't know how to resolve this. Can someone please help on what should be the correct way to make this work?
回答1:
if query_url
can have multiple values depending on the switch branch obviously you need a variable ( declare either with var
or let
).
const is set once and stays that way.
example usage with let
let query_url = ''; switch(condition) { case 'complex': query_url = `something`; break; default: query_url = `something`; break; }
回答2:
Try wrapping the cases in blocks:
switch(condition) { case 'complex': { const query_url = `something`; … // do something break; } default: { const query_url = `something`; … // do something else break; } }
回答3:
I personally prefer (and tend to abuse) the following in these sorts of cases:
const query_url = (()=> { switch(condition) case 'complex': return 'something'; default : return 'something-else'; })();
(this requires ES6 or declaring "use-strict" in Node 4.x though)
Update: Alternatively, much more compact depending on if there is any logic there or if it's a simple assignment:
const query_url = {complex : 'something'}[condition] || 'something-else';
Also, of course, depends on the amount of outside-logic embedded in those switch statements!
回答4:
Just put your switch
in a function with some return statements :
var condition; function aSwitch(condition){ switch(condition) { case 'complex': return 'something'; default: return 'something'; } } const query_url = aSwitch(condition);
回答5:
const query_url={ complex:'something complex', other:'other thing' }[condition]
The drawback is,you can't have default with object,you need to have addition check of condition.