【问题标题】:Are there any possibilities to use "goto" inside switch statement in javascript?有没有可能在javascript中的switch语句中使用“goto”?
【发布时间】:2015-11-21 04:24:35
【问题描述】:

这是我的 JS 示例程序。我必须在 switch 语句中迭代或循环。所以我使用了goto,但是它不起作用。

还有其他选项可以循环这个还是我的语法错误?

var input = 1;
switch (input)
{
    case 1: 
        ...
        break;
    case 2: 
        ...
        break;
    case 3: 
        ...
        if (..) { }
        else    
        {
            goto case 2;
        }
        break;
    default: 
        alert("No Return");
        break;
}

【问题讨论】:

  • 即使这是可能的,情况 2 已经是假的,所以它又会是假的。具体解释你想要完成的事情——即你测试的是真的吗?
  • 我在案例 1 中添加了相同的 goto 案例 2:..但仍然无法正常工作
  • JS 中没有 GOTO。也许您正在寻找案例失败:javascript.about.com/od/hintsandtips/a/fallthrough.htm
  • 这段代码与jQuery无关。

标签: javascript switch-statement goto


【解决方案1】:

有没有可能在javascript的switch语句中使用“goto”?

不,不可能在 switch 语句或其他任何地方使用“goto”,因为 JavaScript 没有这样的语句。

按照评论中的建议,为了解决您的问题,整理您的案例(将 3 移到 2 之上),以便您可以使用 fall-through:

var input = 1;
switch (input)
{
    case 1: 
        ...
        break;
    case 3: 
        ...
        if (..) { ...; break; }
        // fall through to case 2
    case 2: 
        ...
        break;
    default: 
        alert("No Return");
        break;
}

在这种情况下,请务必评论失败,这样查看您的代码的人就不会认为这是一个错误。您可能还需要添加提示,以便您的 linter 不会抱怨。

或者,把 2 和 3 的共同逻辑放在一个小函数中:

function someLogicFor2Or3() { ... }

    case 2: 
        someLogicFor2OrMaybe3();
        break;
    case 3: 
        ...
        if (..) { }
        else someLogicFor2OrMaybe3();
        break;

【讨论】:

    【解决方案2】:

    我使用了以下技术来做到这一点:

    var input = 1;
    while (1) {
      switch (input) {
      case 1: 
        ...
        break; // switch
    
      case 2: 
        ...
        break; // switch
    
      case 3: 
        ...
        if (..) { }
        else {
          input = 2; // goto case 2;
          continue;  // while
        }
        break; // switch
    
      default: 
        alert ("No Return");
        break;  // switch
      }
      break;  // while
    }
    

    【讨论】:

    • 虽然正确,但这种方法很难解析并准确了解其他开发人员正在发生的事情。 /u/user663031提供的解决方案更容易阅读,也更常用。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2015-12-24
    • 2014-04-14
    相关资源
    最近更新 更多