JavaScript break跳出多重循環

多重循環在編程中會常常遇到,那麼在JavaScript中如何指定跳出那層的循環呢。其實這也是break的一個用法,下面是一個不錯的例子,來自《JavaScript權威指南》,能夠參考下:javascript

<script type="text/javascript">
outerloop://命名外圈語句
for(i=0; i<10; i++)
{
	innerloop://命名內圈語句
	for(j=0; j<10; j++)
	{
		// 跳出內圈循環
		if(j>3){break;}
		// 跳出內圈循環
     	if(i==2){break innerloop;}
		// 跳出外圈循環
 		if(i==4){break outerloop;}
		document.write("i = "+i+" , j = "+j+"<br />");
	}
}
document.write("final"+" i = "+i+" , j = "+j);
</script>

程序運行結果:java

i = 0 , j = 0
i = 0 , j = 1
i = 0 , j = 2
i = 0 , j = 3
i = 1 , j = 0
i = 1 , j = 1
i = 1 , j = 2
i = 1 , j = 3
i = 3 , j = 0
i = 3 , j = 1
i = 3 , j = 2
i = 3 , j = 3
final i = 4 , j = 0

另一個例子:強行跳出遞歸node

錯誤的寫法:編程

function getFirstParentNode(node){
    if(node.getParentNode() != null){
        getFirstParentNode(node.getParentNode());
    }else{
        return node;
    }
}

根據某節點獲取他最頂層節點,若是這麼寫,發現return後仍是會執行遞歸oop

正確的寫法:ui

function getFirstParentNode(node){
    if(node.getParentNode() != null){
        return getFirstParentNode(node.getParentNode());
    }else{
        return node;
    }
}

項目中的一個例子:spa

循環easyui的treegrid的每一個子節點,找到和傳入參數listCode相等的子節點code

var returnCcTypeMask = false;
//var rows = $('#id').treegrid('getData');//這個是獲取全部一級節點
function getCcTypeMaskFlag(rows,listCode){
	if(rows && rows.length >0){
		for(var i = 0;i<rows.length;i++){
			var row = rows[i];
			if(row.children.length>0){
				//這裏return 必須加上,不然無論是否找到code == listCode,都會把全部節點所有循環完
				if(!returnCcTypeMask){
					getCcTypeMaskFlag(row.children,listCode);
				};
			}else{
				if(!returnCcTypeMask){
					var code = rows[i].listCode;
					if(code == listCode){
						var ccTypeMask = rows[i].ccTypeMask;
						if(ccTypeMask == 1 || ccTypeMask ==2 || ccTypeMask ==3 || ccTypeMask ==4){
							returnCcTypeMask = true;//顯示提示信息框
						}
						return returnCcTypeMask;
					}
				}else{
					return returnCcTypeMask;
				}
			}
		}
	}
	return returnCcTypeMask;
}

在循環每一個節點的時候,若是該節點有子節點,那麼循環該節點的全部子節點,這裏必需要定義一個所有變量,用來判斷遞歸是否繼續進行:var returnCcTypeMask = false;遞歸

若是不這麼寫,只是在找到的這個節點和參數listCode相等,就return,也是不行的,這個return 只是跳出當前這個循環,可是當前循環的上層循環仍是會繼續進行,因此這裏用所有變量來控制,因此在if(code == listCode)的時候,利用return 跳出當前循環,因而進入上級循環,在上層循環中根據全局變量returnCcTypeMasky的值來判斷是否要跳出上層循環,若是returnCcTypeMasky爲true,會跳出全部循環ip

相關文章
相關標籤/搜索