在jQuery中使用break和continue

时间:2013-01-10 05:00:52

标签: javascript jquery

我知道核心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
  }
});

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

return将继续,return false将会中断。 documentation通过示例谈论了break替代,但它仍然在return回调中指定了.each的功能。

答案 2 :(得分:2)

  

为什么这不正确?

breakcontinue语句仅作为(for-,for-in,while,...)loop statement的一部分有效。你不能在普通的功能中做到这一点。来自规范:

  

如果[...]程序被认为是语法上的错误   该程序在IterationStatement内直接或间接(但不跨越函数边界)包含一个continue / break语句。

相反,你可以从一个函数return(它打破了函数体的进一步执行)。正如您在the documentation中所读到的那样,返回false会停止$.each中的迭代。

答案 3 :(得分:2)

$.each使用回调来执行自定义代码,break是一个可以破坏包装循环的控制语句。 breakcontinue必须直接从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语句。

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

答案 4 :(得分:1)

$.each的情况下,没有可以突破的循环,这就是你得到错误的原因。然而,jQuery的工作方式是,如果函数返回breaks,则循环false

答案 5 :(得分:1)

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

  

每个方法为每个数组调用一次callbackfn函数   元素,以升序索引顺序,直到callbackfn函数   返回false。如果导致callbackfn返回false的元素是   发现,每个方法都会立即返回false。否则,   每个方法都返回true。