今日改缺陷所得 for、break、label

b10l07發表於2018-06-27

1. 首先是break、continue、return區別

  • break: 退出當前迴圈體,執行迴圈體後面的語句。
  • continue:退出本次迴圈,回到迴圈體頂部,開始新的迴圈(繼續執行迴圈體)。
  • return: 我一般不在for迴圈中使用return。函式中使用,直接退出該函式,執行該函式後面的語句。return之後的語句都不會被執行

2. 多層迴圈巢狀下使用break

因為break 只是退出當前迴圈體,如果有多層for迴圈巢狀,那麼內層的break之後,不會阻止外層迴圈的繼續執行

// 外層for
for(.., .., ..){
   // 內層for
   for(.., .., ..){
        break;   // 這裡的break只能退出內層的for,但是外層的for還會繼續執行,不是我想要的
  }
}

比較笨的方法是在外層加個判斷條件,符合就退出外層迴圈。

 $("#addPerson2").click(function(){
    var ifAdd = true;
// 只要某一行的某一列為空,就不在繼續向下迴圈判斷剩下的項是否為空
    for(var i = 0; i < vm.addPersonData.length; i++){
        for(var j = 0; j < vm.indexCloumnsArr.length; j++){
                if(vm.addPersonData[i]["p"+j]==''){
                    ifAdd = false;
                   // 退出內層迴圈                   
                    break;
                }else{
                    ifAdd = true;
                }
        }
// 退出外層迴圈
        if(!ifAdd){
             break;
       }
   }

    if(ifAdd){
        var addObj = {};
        addObj.id = vm.addPersonData.length;
        for(var j = 0; j < vm.indexCloumnsArr.length; j++){
            addObj["p"+j] = "";
        }
        vm.addPersonData.push(addObj);
        $("#grid").data("kendoGrid").dataSource.read();
    }else{
        toaster.error({title: "提示" , body: "列表中含有未填項,請填寫正確後新增新紀錄。"});
    }
});

3. 瞭解一下label語句,適用於break退出指定迴圈體

語法 和使用示例:

label(名稱,相當於個標記,便於引用): statement(for語句迴圈體)


相關文章