亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于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進階篇
  • 參與學習       468832    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

關于for循環

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號