首页 小组 问答 话题 好文 素材 用户 唠叨 我的社区

[教程]forEach如何终止循环?

小蜗锅Lv.1普通用户
2024-10-18 14:33:29
0
5

我们都知道在for循环中,退出循环有3种方式:return(终止)、break(退出整个循环)、continue(退出当次循环)。

但是如果使用forEach方法,但很容易遇到一个问题就是,当你想要跳出这个循环时,上面的方式好像不起作用了,除了return(且return在forEach()中相当于continue)。

foreach能不能跳出循环

举个例子

let list = [0,1,2,3,4,5,6,7,8,9];
list.forEach(function(item){
    console.log(item);
    if (item > 5 ){
        return;
    }
});

输出结果是0,1,2,3,4,5,6,7,8,9。并没有在大于5的时候终止循环。

如果把return替换为break会报错:Uncaught SyntaxError: Illegal break statement。这是为什么呢,在V8的源码里找了又找也没有找到forEach函数的源码,从其他实现的forEach中也能发现一些端倪。

Array.prototype.myEach = function(callback) {
    for (var i = 0; i < this.length; i++)
        callback(this[i], i, this);
};

在回调函数中使用return,只是将结果返回到上级函数,也就是这个for循环中,并没有结束for循环,所以return也是无效的。

所以如果有面试官或者有人问你foreach怎么跳出循环,请你大声的告诉ta,跳不出!

foreach终止循环

在forEach的设计中并没有中断循环的设计,但是可以通过try{}catch(){}结合throw抛错的方式终止循环:

try {
    [1,2,3,4,5].forEach((item) => {
        if (item > 5) throw new Error('退出forEach循环!') 
        console.log(item)
    })
} catch(e) {
    console.log(e)
}

但在实际开发中,不推荐这样使用。这是由于try-catch包裹时,当循环体过大性能会随之下降,这是无法避免的,所以抛出异常只是作为一种中断forEach的手段而已。

除抛出异常之外,没有其他方法可以终止循环。如果您需要这种行为,则该forEach()方法是错误的工具,请使用其他方式。

小蜗锅
小蜗锅

4 天前

签名 : 拿人手短,js方面的不懂问我,为了100块钱的赞助豁出去了。   5       0
评论
站长交流