我知道核心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
}
});
答案 0 :(得分:9)
此行为是由jQuery实现的。这就是jQuery api文档所说的“我们可以通过使回调函数返回break
来false
特定迭代的$ .each()循环。返回non-false
与continue
相同for循环中的{1}}语句;它将立即跳到下一次迭代“,你可以阅读它here。
答案 1 :(得分:3)
return
将继续,return false
将会中断。 documentation通过示例谈论了break
替代,但它仍然在return
回调中指定了.each
的功能。
答案 2 :(得分:2)
为什么这不正确?
break
或continue
语句仅作为(for-,for-in,while,...)loop statement的一部分有效。你不能在普通的功能中做到这一点。来自规范:
如果[...]程序被认为是语法上的错误 该程序在
IterationStatement
内直接或间接(但不跨越函数边界)包含一个continue / break语句。
相反,你可以从一个函数return
(它打破了函数体的进一步执行)。正如您在the documentation中所读到的那样,返回false
会停止$.each
中的迭代。
答案 3 :(得分:2)
$.each
使用回调来执行自定义代码,break
是一个可以破坏包装循环的控制语句。 break
或continue
必须直接从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。