Switch Case 语句中的重复常量声明错误

IT技术 javascript ecmascript-6
2021-02-21 00:24:27

我有以下代码,但收到错误“重复声明 query_url”。

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

我知道 query_url 被声明了两次,这是不对的。但我不知道如何解决这个问题。有人可以帮助了解进行这项工作的正确方法吗?

6个回答

尝试将案例包装在块中:

switch(condition) {
  case 'complex': {
    const query_url = `something`;
    … // do something
    break;
  }
  default: {
    const query_url = `something`;
    … // do something else
    break;
  }
}
@torazaburo:是的,它只能在那个块中使用。我不确定代码的实际目的是什么,您不应该使用 a switchonly 来选择单个值 - 对象(或Map)查找更适合该任务。
2021-04-24 00:24:27
头脑风暴。我认为case是块。谢谢这个提示!
2021-04-27 00:24:27
不知道为什么这被否决了,它解决了错误?
2021-05-04 00:24:27
嗯,不会query_url被限制在定义它的块中,哪种方式会破坏分配给它的整个目的?
2021-05-10 00:24:27
谢谢 !这是真正的解决方案。因为,在这种微不足道的情况下,显然你可以定义一个全局变量,但在更复杂的情况下,全局变量在大多数 switch 分支中可能是无意义的。
2021-05-13 00:24:27

在这些情况下,我个人更喜欢(并倾向于滥用)以下内容:

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

(这需要 ES6 或在 Node 4.x 中声明“use-strict”)

更新:或者,更紧凑,具体取决于那里是否有任何逻辑或者它是否是一个简单的分配:

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

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

如果您需要在每种情况下重新声明相同的变量,请参阅下面的@Bergi 的回答

如果query_url根据 switch 分支可以有多个值,显然你需要一个变量(用var声明let)。

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

let 的示例用法

let query_url = '';
switch(condition) {
  case 'complex':
    query_url = `something`;
    break;
  default:
    query_url = `something`;
    break;
}
请参阅下面的@Bergi 答案
2021-04-19 00:24:27
@eltonkamami 答案就足够了。问题询问如何避免重复定义错误,这就是这样做的。考虑将值query_url传递给另一个函数的情况。在这种情况下,query_url块范围并不重要,因为它只是一个中间值。你太无理取闹了。
2021-04-23 00:24:27
根本不是真的。检查@bergi 答案。
2021-05-06 00:24:27
@eltonkamami 虽然我认为你的答案不值得一票否决,因为它正确地解决了这个问题,但我确实质疑为什么你会在 switch case 中声明一个变量并期望在该范围之外使用它。
2021-05-15 00:24:27

您可以使用{}来确定开关盒的范围。

对于您的情况,只要 var 存在并且可以在大括号之间访问,您就需要返回该变量:

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

如果您不使用return,则必须let query_url在 switch 语句上方声明。

只需将您switch的函数放入带有一些返回语句的函数中:

var condition;
function aSwitch(condition){
switch(condition) {
    case 'complex':
      return 'something';
    default:
      return 'something';
  }
}
const query_url = aSwitch(condition);
你只需要返回没有赋值的值,这将创建一个全局或导致错误
2021-04-25 00:24:27
如果您不"use strict";这样做,您的代码会发生一些奇怪的事情。每个返回语句都在创建/分配到全局变量查询 url。
2021-05-04 00:24:27
@antoniskamamis 编辑。谢谢你的提示 :)
2021-05-04 00:24:27