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

相关文章
相关标签/搜索