2016-07-15 59 views
3

我們知道,我們可以省略內部的for循環的初始化:的Javascript:略初始化嵌套For循環內

var i = 0; 
for(; i < 10; i++) { 
    // do Something with i 
} 

但是,我想,如果我省略了嵌套循環內的初始化,以及:

var i = 0; 
var j = 0; 
for(; i < 10; i++) { 
    for(; j < 10; j++) { 
    // only do Something with j 
    // outner loop only run once 
    } 
} 

解決方案:

var i = 0; 
var j; 
for(; i < 10; i++) { 
    j = 0; 
    for(; j < 10; j++) { 
     // everything is fine! 
    } 
} 

誰能解釋怎麼回事?我是Javascript新手。

+0

當您在兩個循環之外初始化j = 0時。 然後,對於i = 0,內循環將運行,然後j的值爲10; 之後,該值從未初始化爲0,這是您在第二種情況下所做的。 由於內循環只運行一次(僅在i = 0時) – 2016-07-15 09:50:54

回答

1

循環運行多次,但在第一次運行i之後,'j'已經是10,所以第二個循環不再在i的下一個值期間運行。

如果你會寫這樣的東西。

for(; i < 10; i++) { 
    for(; j < 10; j++) { 
      console.log("test") 
     } 
     console.log("another test") 
    } 

您會看到兩條消息都打印了10次。

你的「j」循環只運行「十次一次」的原因是因爲在運行10次後你不會將J置回零。因此,如果i第一次運行後,則對於每個循環,語句j < 10都是正確的。

你可以通過循環設定j = 0第一內解決這個問題(如果你不想把它放在第二循環的變量初始化內。)

for(; i < 10; i++) { 
    j = 0; 
    for(; j < 10; j++) { 
     console.log("test") 
    } 
    console.log("another test") 
} 
+0

啊哈!看起來我已經做了一些簡單的編程錯誤。 outner循環實際上是運行的,只是變量j在第一次運行時觸發了計數器,所以它不會再次運行。感謝您的解釋=)! –

+0

@Hunter.Wei沒問題!如果你願意,你可以接受這個答案是正確的,讓其他人知道它是正確的。 (並且如果你願意,upvote) –

-1

每次i增量,您需要重置j0

如果你重寫你的腳本,使每個變量被初始化for loop聲明本身,那麼每次i增量,j將被重置爲0

for (var i = 0; i < 10; i++) { 

    for (var j = 0; j < 10; j++) { 
    } 

} 
+0

OP知道這一點,他問了一個關於當我們忽略for循環內初始化時會發生什麼的問題。 :-) –

+0

我認爲你的回答比較好,@DylanMeeus和我已經提高了你的答案。但我不相信OP知道_「每次'i'增加時,都需要將'j'重置爲'0'。」 - - 因爲它正是不知道這個(或者看到它)導致OP問他們的問題。 – Rounin

+1

我認爲他這麼做,考慮到標題說(忽略初始化)和第一句話。但感謝您的滿意!如果他的確不*知道這個,你的回答就是正確的答案! –