1. 程式人生 > >來談談基礎卻重要的for循環

來談談基礎卻重要的for循環

https 一位 遇到 結果 stat i++ 循環語句 amp markdown

作為任何一種語言的程序員,相信你都用過各種各樣的循環語句。最近我在開發的過程中因為for循環遇到了一點堵,所以在這裏來梳理一下關於for循環的一些知識點。

最簡單的for循環

這是最容易上手的一種循環類型,然後我因為基礎知識不夠紮實在這裏踩了坑。

這是我最原始的代碼

res.chip_list = {
    {‘task_status‘:0},
    {‘task_status‘:0},
    {‘task_status‘:0},
    {‘task_status‘:0},
    {‘task_status‘:0},
}
for (let i = 0; i <= res.chip_list.length; i++) {
    if (res.chip_list[i].task_status === 0) {
      console.log(`頁面去解鎖碎片${i + 1}按鈕_曝光`)
    } 
}

我希望得到的結果是整個循環出來只會輸出一條數據,某個按鈕曝光。但實際的輸出是這樣的

頁面去解鎖碎片1按鈕_曝光
頁面去解鎖碎片1按鈕_曝光
頁面去解鎖碎片1按鈕_曝光
頁面去解鎖碎片1按鈕_曝光
頁面去解鎖碎片1按鈕_曝光

這是因為for會去遍歷每一個i,因為後面的i都是0,所以都會被返回。

那要怎樣才可以讓它匹配到一個正確就不再往下執行了呢?

為此我嘗試了很多方法,最後才知道原來在if裏面是有return的,使用return,匹配到立即終止。

for (let i = 0; i <= res.chip_list.length; i++) {
    if (res.chip_list[i].task_status === 0) {
      console.log(`頁面去解鎖碎片${i + 1}按鈕_曝光`)
      return
    } 
}

這樣做在for循環內部輸出,似乎已經沒什麽問題了,但是如果我們在外面看一下呢

for (let i = 0; i <= res.chip_list.length; i++) {
    if (res.chip_list[i].task_status === 0) {
      console.log(`頁面去解鎖碎片${i + 1}按鈕_曝光`)
      return
    } 
}
console.log(1234)//不會輸出

‘1234‘不會被輸出。這是因為for循環在js裏面並不是封閉的一塊它與外面是直接連通的所以它一旦return後面的代碼都不會再執行。

那怎麽辦呢?for循環裏除了有return還有brake和continue呀,brake同樣可以打斷,而且後面的代碼也是可以執行的喲~

for (let i = 0; i <= res.chip_list.length; i++) {
    if (res.chip_list[i].task_status === 0) {
      console.log(`頁面去解鎖碎片${i + 1}按鈕_曝光`)
      brake
    } 
}
console.log(1234)//1234

我以前在開發的過程中重來沒有用過brake這些,這次的坑讓我警惕,並去看了一些其他關於for循環的知識。

我在知乎上看到一位大佬總結的很好,這裏分享給大家
https://zhuanlan.zhihu.com/p/23812134?utm_source=tuicool&utm_medium=referral

來談談基礎卻重要的for循環