【问题标题】:javascript exiting for loop without returningjavascript退出for循环而不返回
【发布时间】:2012-05-15 08:00:33
【问题描述】:

我有一个 for 循环,我想像这样退出:

function MyFunction() {
  for (var i = 0; i < SomeCondition; i++) {
     if (i === SomeOtherCondition) {
        // Do some work here.
        return false;
     }
  }
  // Execute the following code after breaking out of the for loop above.
  SomeOtherFunction();
}

问题是// Do some work here.语句执行后,我想退出for循环,但仍想执行整个for循环下面的代码(// Execute the following code after breaking out of the for loop above.下面的所有内容)。

return false 语句确实退出了 for 循环,但它也退出了整个函数。我该如何解决这个问题?

【问题讨论】:

标签: javascript for-loop


【解决方案1】:

您正在寻找break statement

【讨论】:

  • 你为什么要引用 C# 示例?
【解决方案2】:

使用 break 或 continue 语句

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i === SomeOtherCondition) { 

        // Do some work here 
        break;
     } 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

或继续处理除条件之外的项目

function MyFunction() { 
  for (var i = 0; i < SomeCondition; i++) { 

     if (i != SomeOtherCondition) continue;

     // Do some work here 
  } 

  SomeOtherFunction(); 
  SomeOtherFunction2(); 
} 

【讨论】:

    【解决方案3】:

    有几个人提供了break作为解决方案,这确实是问题的最佳答案。

    但是,为了完整起见,我觉得我还应该补充一点,可以在保留 return 语句的同时回答这个问题,方法是将 if() 条件的内容包装在一个闭包函数中:

    function MyFunction() {
    
      for (var i = 0; i < SomeCondition; i++) {
    
         if (i === SomeOtherCondition) {
            function() {
               // Do some work here
               return false;
            }();
         }
      }
    
      SomeOtherFunction();
      SomeOtherFunction2();
    }
    

    正如我所说,break 在这种情况下可能是更好的解决方案,因为它是问题的直接答案,并且闭包确实引入了一些额外的因素(例如更改 this 的值,限制了函数内部引入的变量等)。但它值得作为解决方案提供,因为它是一种值得学习的宝贵技术,如果不一定要在这个特定场合使用,那么肯定会在未来使用。

    【讨论】:

    • 好的,谢谢。我的理念是让我的代码保持简单,以便将来更容易维护。投赞成票以防其他人想采取这个方向。
    • @frenchie - 你完全正确;这绝对是最好的哲学。 break 在这种情况下是正确的答案。闭包非常强大并且有很多用途(大多数 jQuery 代码都是基于它们构建的),但是这种情况太琐碎了,无法使用。
    • 这个模型根本没有break for 循环。
    【解决方案4】:

    Break - 打破整个循环。 继续 - 跳过循环中的一个步骤。所以它跳过下面的代码继续;

    【讨论】:

      【解决方案5】:

      将 i 变量设置为 somecondition 值是个好方法吗?

      for (var i=0; i<SomeCondition; i++) {
      
         if (data[i]===true) {
         //do stuff
         i=SomeCondition;
         }
      }
      

      【讨论】:

        【解决方案6】:

        好吧,也许这是一个老话题,但是在阅读了所有答案后,我想知道为什么没有人建议使用 while 循环来代替?

        我猜在 JavaScript 中你可以打破一个 for 循环(在许多其他语言中你不能这样做,或者被认为是一种不好的做法),但我仍然会只在你想要迭代循环的情况下使用 for 循环 a固定次数。

        这是我的建议:

        function MyFunction() {
        
          var i = 0,
              breakLoop = false;
        
          while (i < SomeCondition && !breakLoop) {
        
             if (i === SomeOtherCondition) {
                breakLoop = true;
             }
        
             i++;
        
          }
        
          SomeOtherFunction();
          SomeOtherFunction2();
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-30
          • 2012-10-14
          • 2019-11-06
          • 1970-01-01
          • 1970-01-01
          • 2011-01-22
          • 2013-03-21
          • 2012-08-28
          相关资源
          最近更新 更多