6

我知道使用核心 Javascript 我们可以做这样的事情:

for(i=1;i<10;i++){
   if(i==5){
    //break or continue
   }
}

但为什么这是不正确的?

$.each(iteratorarray,function(i){ //iteratorarray - just an array
  if(i==5){
    //break or continue,will cause error here
  }
});
4

6 回答 6

9

这种行为是由 jQuery 实现的。这就是 jQuery api 文档所说的“我们可以break通过使回调函数 return 在特定迭代中循环 $.each() false。返回与 for 循环中non-false的语句相同continue;它将立即跳到下一次迭代”,你可以在这里阅读。

于 2013-01-10T05:02:13.880 回答
4

return将继续,return false将中断。该文档通过示例讨论了break替代品,但它仍然指定return.each回调中的功能。

于 2013-01-10T05:02:05.903 回答
2

为什么这是不正确的?

breakorcontinue语句仅作为 (for-, for-in-, while-, ...)循环语句的一部分有效。你不能在一个普通的函数中做到这一点。从规范:

如果 […] 程序直接或间接(但不跨越函数边界)在IterationStatement.

相反,您可以return从一个函数(这会破坏函数体的进一步执行)。正如您在文档中所读到的,返回会false停止$.each.

于 2013-01-10T05:11:40.633 回答
2

$.each使用回调来执行自定义代码,break是一个可以破坏包装循环的控制语句。breakorcontinue必须直接从主体调用,而不是loop从委托函数调用。

$.each(iteratorarray,function(i){ //iteratorarray - just an array
  if(i==5){
    //break or continue,will cause error here
  }
});

可以认为等于

for(i=0;i<iteratorarray.length;i++){
    if(callback(i, iteratorarray[i]) === false){
        break;
    }
}

在这里,您的代码位于callback()函数内部,因此您不能loop control在回调中使用语句。

您可以在文档中阅读更多内容。

于 2013-01-10T05:13:04.807 回答
1

在这种$.each情况下,没有可以跳出的循环,这就是您收到错误的原因。然而,jQuery 这样做的方式是,breaks如果你的函数返回false.

于 2013-01-10T05:03:40.977 回答
1

您还可以使用 JavaScript 的every方法来迭代数组元素。

every 方法对每个数组元素调用一次 callbackfn 函数,按索引升序排列,直到 callbackfn 函数返回 false。如果找到导致 callbackfn 返回 false 的元素,则 every 方法立即返回 false。否则,every 方法返回 true。

于 2013-01-10T05:08:25.200 回答