为了账号安全,请及时绑定邮箱和手机立即绑定

关于for循环

http://img1.sycdn.imooc.com//57faa7670001cbf813020597.jpg

如图所示,,为什么我第16行屏蔽会得到正确答案,而不屏蔽就会循环出这么多不需要的答案啊?

正在回答

4 回答

这个问题可能当面讲很好理解,通过打字有点难说清,我试着说说

首先明确,你的代码中嵌套了三个 for 循环,

for(var i=0;i<infos.length;i++) //我们设为 A
for(var j=0;j<infos[i].length;j++) //我们设为 B
for(var k=0;k<infos[i].length;k++) //我们设为 C

其实可以看到,你的 B 和 C 两个循环是一样的,有冗余,这里先不讨论,先解释为什么出现你说的现象。

你的 B 循环内,C 循环之前有两句代码,

if(infos[i][j]=="大一")
document.write(infos[i]+"<br/>");

document 这一句就是你的第 16 行,我们简称 16,16 未屏蔽时,是属于 if 语句体的,而后面的 C 循环则是独立于 if 语句,不受 if 的影响,所以每当 B 循环一次,C 都要完整的循环 4 次,这 4 次 C 的循环会打印一个 小A,(这里我们先拿 小A 举例,其他的类推),而 B 一共会循环 4 次,所以 C 就会打印出 4 个 小A,在第 4 次打印 小A 之前,if 语句条件满足,会走 16,所以先打印一次数组。


当 16 屏蔽,由于 if 未加大括号 {},会默认将紧随其后的一句代码归入 if 语句体,这里的 C 循环是一个整体,紧随 if 之后,所以被归入 if 语句体,那么也就是说,只有当 if 语句条件满足时,C 循环才会发生。而在 B 循环的 4 次循环中,if 语句只会满足一次,就是 “大一” 那次,这时 C 发生 4 次循环,打印一个 小A,然后 B 循环结束,A 循环进入下一次循环。所以最后你得出的结果是正确的。


你的代码没必要这样写,在课程下面的 “同学代码”中,有很多同学的代码,都写得不错,你可以看看,参照一下。

0 回复 有任何疑惑可以回复我~
#1

破晓之空 提问者

十分感谢,解释得很详细
2016-10-10 回复 有任何疑惑可以回复我~

for(var i=0;1<infos.length;i++){

    if(infos[i][3]="大一"){

            if(infos[i][1]="女生'"){

                      document.write("infos[i][0]")  ;

        }

    }

}

0 回复 有任何疑惑可以回复我~
#1

getElementsByHeart

i<infos.........
2016-10-10 回复 有任何疑惑可以回复我~

    for(var j=0;j<infos[i].length;j++){
            if(infos[i][j]=="大一")
            document.write(infos[i]+"<br/>");

这里的代码是判断一行中所有符合你的条件“大一”的一个循环,你设置你每循环一次就打印一次

0 回复 有任何疑惑可以回复我~

因为你是在循环里面输出数组信息啊,除了16行还有20行。其实不需要那么麻烦的,用一个循环和一个判断语句就可以完成这个练习了。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468188    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

关于for循环

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信