我知道使用核心 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
}
});
我知道使用核心 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
}
});
这种行为是由 jQuery 实现的。这就是 jQuery api 文档所说的“我们可以break通过使回调函数 return 在特定迭代中循环 $.each() false。返回与 for 循环中non-false的语句相同continue;它将立即跳到下一次迭代”,你可以在这里阅读。
return将继续,return false将中断。该文档通过示例讨论了break替代品,但它仍然指定return了.each回调中的功能。
$.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在回调中使用语句。
您可以在文档中阅读更多内容。
在这种$.each情况下,没有可以跳出的循环,这就是您收到错误的原因。然而,jQuery 这样做的方式是,breaks如果你的函数返回false.
您还可以使用 JavaScript 的every方法来迭代数组元素。
every 方法对每个数组元素调用一次 callbackfn 函数,按索引升序排列,直到 callbackfn 函数返回 false。如果找到导致 callbackfn 返回 false 的元素,则 every 方法立即返回 false。否则,every 方法返回 true。