首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 雙層循環中 break 標籤導致計數器異常的分析

     編輯:程式設計綜合問答

代碼與預期

var num = 0, i = 0, j = 0;
outermost: for (; i < 10; i++) {
    for (; j < 10; j++) {
        if (i == 5 && j == 5) { break outermost; }
        num++;
    }
}
alert(num); // 預期 55,實際 10

執行流程解析

  1. 外層 i=0,內層 j 從 0 遞增至 9,num 累加 10 次(i=0 時 i==5 不成立)。
  2. 內層結束後 j=10,**不再重置為 0**(因為 for(; j<10; j++) 缺少初始化部分)。
  3. 外層進入 i=1,內層條件 j<10 直接為假,不執行循環體。
  4. 外層繼續 i=2..9,內層均不執行,num 不再增加。
  5. 最終 num=10。

修正方案

在內層循環初始化 j:

outermost: for (; i < 10; i++) {
    for (j = 0; j < 10; j++) {  // 每次外層迭代重置 j=0
        if (i == 5 && j == 5) { break outermost; }
        num++;
    }
}
// 結果:i=0..4 各 10 次 = 50,i=5 時 j=0..4 共 5 次 → 總計 55

核心知識點

  • for 循環三部分(初始化;條件;增量)均可省略,但**省略初始化不會自動重置變量**。
  • 標籤 break outermost 直接跳出最外層循環,不會執行外層的增量表達式 i++。
  • 嵌套循環計數器務必在正確作用域初始化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved