var num = 0;
outermost:
for(var i =0;i<10;i++){
for(var j = 0;j<10;j++){
if(i==5&&j==5){
continue outermost;
}
num++;
}
}
console.log(num);
// 95
这个结果是怎么得出来的?循环的时候是内层循环从0到9循环完毕后再外层循环吗?求解,嵌套循环的原理是怎样的,求助。谢谢
var num = 0;
outermost:
for(var i =0;i<10;i++){
for(var j = 0;j<10;j++){
if(i==5&&j==5){
continue outermost;
}
num++;
}
}
console.log(num);
// 95
这个结果是怎么得出来的?循环的时候是内层循环从0到9循环完毕后再外层循环吗?求解,嵌套循环的原理是怎样的,求助。谢谢
当i==5 && j==5
的时候,会跳出第二个for
循环,所以相当于55,56,57,58,59这5次没有执行num++
。
另外,很少有人在代码中用label
了吧?
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
你这个循环,因为内循环后面没有语句,所以其实可以不用 lable,改成这样就好理解多了
多一点思考
把你的问题提升一下,在内循环后加一句话再讨论就热闹了
然后来看怎么去掉 label
加个变量来记录状态
因为在
i == 5 && j == 5
的时候,直接继续了外层循环,跳过了内层循环后面的n++
,所以很容易想到在break
记个状态,之后外循环根据状态来判断是否执行后面的语句当然,如果
n++
那里语句比较多,可以改成然后这种方法看起来结构比较复杂。如果把内循环作为独立的逻辑,封装成 function,逻辑就简单一些。
把内循环封装成 function
很幸运,javascript 可以在任意位置定义 function。我们通过 function 的返回值来决定是否继续后面的内容
把 function 提出来
也许这样看还是不够清楚,因为在循环内部定义 function 涉及到变量作用域贯穿的问题,当然它也让大循环的代码变长了,所以把 function 提出来。
可以发现内部 function 只用到了外循环中的变量
i
,所以把i
作为一个参数传入这样就清楚多了