Javascript ForEach循环是否允许使用break和continue?
Javascript ForEach循环是否允许使用break和continue?,javascript,Javascript,ForEach循环是否允许我们使用break和continue 我已尝试使用这两种方法,但收到一个错误: Illegal break/continue statement 如果它允许,我如何使用它们呢?不,它不允许,因为您将回调作为返回传递,它作为普通函数执行 让我澄清一下: var arr = [1,2,3]; arr.forEach(function(i) { console.log(i); }); // is like var cb = function(i) { c
ForEach
循环是否允许我们使用break
和continue
我已尝试使用这两种方法,但收到一个错误:
Illegal break/continue statement
如果它允许,我如何使用它们呢?不,它不允许,因为您将回调作为返回传递,它作为普通函数执行 让我澄清一下:
var arr = [1,2,3];
arr.forEach(function(i) {
console.log(i);
});
// is like
var cb = function(i) {
console.log(i);
// would "break" here do anything?
// would "continue" here do anything?
// of course not.
}
for(var j = 0; j < arr.length; j++) {
cb(arr[j]);
}
var-arr=[1,2,3];
arr.forEach(功能(i){
控制台日志(i);
});
//就像
var cb=功能(i){
控制台日志(i);
//在这里“休息”会有什么作用吗?
//在这里“继续”会有什么作用吗?
//当然不是。
}
对于(var j=0;j
forEach所做的就是反复调用一个实际函数,忽略它是如何退出的,然后在下一个元素中再次调用它。
在该回调函数中,如果返回,它将像forEach
中的continue
一样工作。因为此时函数的其余部分不会执行,并且会再次调用它。没有类似的中断。
Ruby支持这种灵活性,使用blocks/procs而不是methods/lambdas
Per:
注意:无法停止或中断forEach循环。解决方案是使用Array.every或Array.some。见下面的例子
every
和some
与forEach
完全相同,只是它们注意回调的返回值<代码>每个都会因错误值而中断,一些
会因真实值而中断,因为它们会短路。它们与&&
和|
完全类似<代码>&测试每个表达式是否真实,|
测试某些表达式是否真实,这将帮助您记住短路是如何与每个
和一些
一起工作的。如有疑问,请尝试。如前所述,您不能在JavaScript数组.prototype.forEach
循环中使用continue
或break
。但是,还有其他选择:
选择1
使用jQuery.each()
函数()
只需返回true
即可继续,或返回false
即可中断循环
选择2
只需使用return
继续,或使用抛出新错误()。我不一定推荐这样做,但知道这是可能的,这很有趣
try {
[1, 2, 3, 4].forEach(function(i) {
if (i === 2) {
return; // continue
}
if (i === 3) {
throw new Error(); // break
}
console.log(i);
});
}
catch (e) {
}
预期结果只是1
继续进行下一次迭代。与return相同吗?@user3450695 continue是非法的,并抛出一个错误。哪一个跳过块中剩余的“stuff”并转到下一个迭代?@user3450695添加到我的答案中。