在`forEach`函数里面`return`关键字是什么意思?

Tân*_*Tân 101 javascript arrays

$('button').click(function () {
   [1, 2, 3, 4, 5].forEach(function (n) {
      if (n == 3) {
         // it should break out here and doesn't alert anything after
         return false
      }
      alert(n)      
   })
})
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click me</button>
Run Code Online (Sandbox Code Playgroud)

我的问题:虽然我打电话,为什么它仍会提醒下一个号码return?就像:忽略下面的代码并继续下一个元素

squ*_*Lis 138

来自Mozilla开发者网络:

forEach()除了抛出异常之外,没有办法阻止或破坏循环.如果您需要这样的行为,该forEach()方法是错误的工具.

提前终止可通过以下方式完成:

另一个阵列的方法:every(),some(),find(),和findIndex()测试使用谓词返回truthy值的数组元素,以确定是否需要进一步的迭代.

  • 使用`forEach`和trowing一个错误来停止迭代是一个非常糟糕的做法,并且是一个真正的矫枉过正.在你的情况下,你真的不想迭代所有**的数组(forEach ...),但你想运行直到满足某些语句.你应该使用一个简单的循环(`while`,`for`,`for in`,`do while`). (30认同)
  • 我同意@RonenCypis ...并建议你使用`some()` (7认同)
  • 这似乎并没有回答“return”在“forEach”循环的实践中实际上做了什么的问题,但我想下一个答案会有所帮助。 (6认同)
  • 每个人都有一个计划,直到 `new Array(5)` 出现...... `(new Array(5)).every(e =&gt; e === "也许 for 循环 + break 并不是一个坏主意all?")` 由于稀疏数组会产生令人惊讶的结果。 (2认同)

Ron*_*pis 25

return退出当前功能,但反复不断,所以你得到的"下一个"项目是跳过if和警报的4 ...

如果你需要停止循环,你应该使用如下的普通for循环:

$('button').click(function () {
   var arr = [1, 2, 3, 4, 5];
   for(var i = 0; i < arr.length; i++) {
     var n = arr[i]; 
     if (n == 3) {
         break;
      }
      alert(n);
   })
})
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多关于js break&continue的信息:http://www.w3schools.com/js/js_break.asp

  • 你什么意思???为了便于理解,我写了这样的代码......代码可能会缩短一点,但它可以得到你想要的,没有额外的数组迭代,就像其他答案一样:-) (3认同)
  • 你已经在你的例子中声明了数组,我只是为它添加了一个引用(var arr)以便于访问.您还可以将`for`循环更改为`for in`或`while` ...所有这些选项都要好得多,然后创建新函数的速度要快得多,并在此处的其他示例中抛出错误.性能明智,清洁代码......无论如何好运:-) (3认同)
  • 这个答案解决了我的确切问题,即有时仍然需要在“ forEach”循环中返回是否有意义,当您不希望在特定条件下执行循环逻辑的其余部分时,绝对可以这样做! (3认同)