大家都知道 js 的 forEach里是不能使用break。但是為什么不能在forEach里使用呢?在forEach里使用break 會(huì)發(fā)生什么呢?
一. 在forEach里使用break 會(huì)發(fā)生什么
紙上得來(lái)終覺(jué)淺,絕知此事要躬行。要想知道發(fā)生什么,不妨在代碼里驗(yàn)證一下。
在控制臺(tái)可以看到輸出:語(yǔ)法錯(cuò)誤。
二. 為什么不能在forEach里使用break
要想知道forEach里為什么不能使用break,必須先要搞清楚break的語(yǔ)法。
你真的了解break嗎
break 表示中止當(dāng)前循環(huán)。
語(yǔ)法:break [label];
label:與語(yǔ)句標(biāo)簽相關(guān)聯(lián)的標(biāo)識(shí)符。如果 break 語(yǔ)句不在一個(gè)循環(huán)或者Switch語(yǔ)句中,則該項(xiàng)是必須的。
我們看一個(gè)例子:
我們平時(shí)正常使用時(shí)
break 與語(yǔ)句標(biāo)簽一起使用時(shí)
輸出結(jié)果:最外層輸出:1,最次層輸出:1,2,3,4。可以看出brake終止循環(huán)是有條件的。我們?cè)诨貋?lái)看forEach這個(gè)問(wèn)題。
先看下forEach語(yǔ)法:
是上面的定義相當(dāng)于:
可以看出:我們?cè)趂orEach里使用break,其實(shí)是在callback里使用break。再明白一點(diǎn),其實(shí)就是相當(dāng)于你在for循環(huán)里這樣寫:
到這里我想你已經(jīng)明白了為什么不能在forEach里使用break了?;氐奖疚牡念}目上來(lái)。
如何在forEach的循環(huán)里break?
查閱MDN,上面有一個(gè)備注:
編輯切換為居中
MDN
在forEach里合法的使用break
也可以使用every 或者 some等
最推薦的方式呢,就是這種需要break的場(chǎng)景下,直接使用every或者some。
- every: 碰到return false的時(shí)候,循環(huán)中止,return true 循環(huán)繼續(xù);
- some: 碰到return ture的時(shí)候,循環(huán)中止,return false 循環(huán)繼續(xù);
總結(jié)
本文介紹了為什么不能在forEach里使用break;在forEach里使用break 會(huì)發(fā)生什么以及怎樣在forEach里使用break。
?
本文摘自 :https://blog.51cto.com/u