鍍金池/ 問答/HTML/ JavaScript中跳不出的forEach循環(huán),知道了結(jié)果,但是由何原因?qū)е碌?/span>

JavaScript中跳不出的forEach循環(huán),知道了結(jié)果,但是由何原因?qū)е碌哪兀?/h1>

在項(xiàng)目開發(fā)過程中會(huì)使用到forEach循環(huán),在平時(shí)使用過程中未留意到如下的現(xiàn)象:

var arr=[1,2,3];
// 循環(huán)一
console.log('循環(huán)一:');
arr.forEach(function(item) {
    if (item > 2) {
        return false;
    }
    console.log(item);
});
// 循環(huán)二
console.log('循環(huán):');
arr.forEach(function(item) {
    console.log(item);
    if (item > 2) {
        return false;
    }
});

可以看到循環(huán)一是想要的結(jié)果,而循環(huán)二卻執(zhí)行完循環(huán)了,這是為何呢?

圖片描述

回答
編輯回答
莫小染
  1. ForEach(callback)這是一個(gè)回調(diào)方法,你return false并沒有任何意義,想停止可以用for of
  2. 事實(shí)上都執(zhí)行了3次回調(diào),只是循環(huán)1中你第3次沒打印而已。
2017年10月13日 17:55
編輯回答
夕顏

forEach 遍歷數(shù)組的時(shí)候是無法 break 或者 return false 中斷的, 可以使用 for of 代替
這里貼一篇張?chǎng)涡窭蠋煹奈恼聦懙暮茉敿?xì),可以去看一下 https://www.zhangxinxu.com/wo...

2017年4月22日 16:26
編輯回答
吢涼

forEach滿足條件后并不會(huì)跳出循環(huán)。

循環(huán)一的輸出語句是在return false的后面

循環(huán)二的輸出語句是在return false的前面,所以造成了這種假象。

其實(shí)你應(yīng)該用some()或者every();

2018年4月23日 12:13
編輯回答
半心人

這里的return; 不管加不加return值, 可以看作是結(jié)束這個(gè)回調(diào)函數(shù),所以如果遍歷未結(jié)束會(huì)進(jìn)入下一個(gè)回調(diào)。而并不能停止這個(gè)for循環(huán)。有點(diǎn)像continue的味道?

2018年9月1日 04:26