2017-07-18 158 views
1

你好我在Mozilla Firefox 53.0,並在循環使用javascript發現這個的JavaScript循環奇怪的行爲

的情況下1:sintaxis導致無限循環,瀏覽器崩潰。

for(var i=0;i<array.length;i+2) 
     { 
      console.log(array[i]); 
      console.log(array[i+1]); 
      console.log(array[i+2]); 
     } 

情況2:正常循環行爲。

for(var i=0;i<array.length;i=i+2) 
     { 
      console.log(array[i]); 
      console.log(array[i+1]); 
      console.log(array[i+2]); 
     } 

兩種語法都正確嗎?什麼會產生無限循環? 從的console.log(陣列)萃取陣列 數組[ 「Dieguez豪爾赫阿爾貝託」, 「Cel脫氣:(02244)453125」, 「[email protected]」]

+0

第一個會導致一個無限循環,因爲最後一部分你只有'i + 2',它不更新變量'i',所以'i'永遠不會等於或高於'array。長度' –

+0

是的,for for(var i = 0; i user2402794

回答

1

一個for循環在JavaScript(在Java中,和許多其他語言)具有以下一般語法:

for (<loop variable; init>; <criteria check>; <change to loop variable>) 

請原諒我,如果這是不準確。在你的第一個循環:

for (var i=0; i < array.length; i+2) 

你告訴JavaScript來計算i+2在每個循環迭代結束。但是你永遠不要將這個值分配回循環計數器i。因此,該循環繼續無限地迭代,其值爲零,即i。然而,在下面的循環:

for (var i=0; i < array.length; i=i+2) 

要分配給i+2i。這意味着i在循環的每次迭代期間都會增長2,並且當i達到數組長度的大小時,循環將最終終止。

更新:

基於您的評論,您似乎認爲i + 2會增加和分配上i++這樣做的理由,沒有使用一個明確的等號。但是,i++實際上是i = i + 1的簡寫,所以實際上這裏的任務正在發生。但i + 2不是一項任務,它只是一個表達,因此你的循環會一直持續下去。

+0

我明白,因爲我總是用於(var i = 0;我 user2402794

+0

@ user2402794'i ++'是'i = i + 1'的縮寫,所以實際上有一個分配發生在那裏,它只是不明確。 –

+0

好的感謝您的快速回答 – user2402794

0

在第一循環中,您沒有重新分配變量ii + 2只是一個聲明,從不改變i的值。

由於這個原因,i < array.length的循環退出條件永遠不會滿足,循環也不會退出。

0
在第一循環

你是不是重新分配變量i,如果你想它一定是這樣

我+ = 2等與I = I + 2

如果你只運行我+ 2它的公正的聲明,而不是改變的變異價值我。所以我永遠不會增加。也許你可以看到控制檯打印靜態,但始終循環。因爲我永遠不會停止,因爲我永遠不會達到陣列的長度。所以,你必須讓我打破for循環。