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

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

在項目開發(fā)過程中會使用到forEach循環(huán),在平時使用過程中未留意到如下的現(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)這是一個回調(diào)方法,你return false并沒有任何意義,想停止可以用for of。
  2. 事實上都執(zhí)行了3次回調(diào),只是循環(huán)1中你第3次沒打印而已。
2017年10月13日 17:55
編輯回答
夕顏

forEach 遍歷數(shù)組的時候是無法 break 或者 return false 中斷的, 可以使用 for of 代替
這里貼一篇張鑫旭老師的文章寫的很詳細,可以去看一下 https://www.zhangxinxu.com/wo...

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

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

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

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

其實你應該用some()或者every();

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

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

2018年9月1日 04:26