2013-09-28 279 views
-3
var num=0; 
outermost: for(var i=0;i<10;i++) 
{ 
    for(var j=0;j<10;j++) 
    { 
    if(i==5 && j==5) 
     { 
     break outermost; 
     } 
    num++; 
    } 
} 
console.log(num); //Answers 55 

這個東西是怎麼工作的我的意思是一旦J的值從0變爲1就進入J循環,然後j循環會運行10次(我認爲),那麼這個循環怎麼會中斷呢? 我是新編程友好Yelp!if語句中包含嵌套for循環的break語句嗎?

+0

你可以這樣讀:'break outermost;'loop。 –

回答

1

當輸入if語句時,會執行break語句。

i==5 && j==5評估爲true時,輸入if語句。

當這種情況發生i等於5 AND j等於5

i對於到達如圖5所示,外環具有運行一個完整的5倍(對於i = 0,1,2, 4)。這意味着內部循環運行5 * 10 = 50次。對於j在內循環的最後一次運行中達到5,內循環必須運行5次(對於j = 0,1,2,3,4)。總共,內循環必須運行55次,這表示num變量將保持55.

+0

不,我的問題是,當我進入循環的值增加一個,然後我們進入第二個循環,運行10次然後再次外部循環增加到兩個然後如何來我和j的價值將五同樣的例子.. – neutrino

+0

每次輸入內循環時,'j'的值都被設置爲0。 – Joni

0

console.log(i + " " + j + " " + num);放在內循環內,在if之前。

它會顯示你必須知道的一切。

0

每次由一個和num十增加i最外循環迭代(因爲它是內循環,它迭代十倍每最外循環迭代內,所以num增加十倍)的時間。當你到達第六次迭代時,i爲5,j爲0.內循環迭代5次,這導致j變爲5.到目前爲止,num已經變爲55.在下一次迭代中,if控制成功,實際上i == 5 && j == 5,中斷因爲num++語句放在之後 if條件第56次迭代將不會完成,並且不會將num增加到56.但迭代大約是55 + 1/2。

爲什麼j在每次最外迭代後都會重置?因爲它在循環內部有作用域,所以在每個最外層的迭代之後它會被銷燬並重新創建。