2016-03-26 129 views
-3

該函數的結果是:「yoyo my brother」。混淆Javascript中的for循環

爲什麼喲只添加在第一次迭代,爲什麼結果不是:「yoyo yomy yobrother」?

function myFunction() { 
    var cars = ["yo", "my", "brother"]; 
    var i = 2; 
    var len = cars.length; 
    var text = "yo"; 

    for (; i < len; i++) { //typo, var i=0; 
    text += cars[i]+ " "; 
} 
}; 

哦,謝天謝地,我不知道我錯過了那個錯字xD。謝謝你的幫助。

+0

您分享的代碼中是否存在拼寫錯誤?你在for循環外聲明'i' – Harangue

+0

爲什麼你認爲它會是'yoyo yomy yobrother'?你也可能想把'i'定義爲:'var i = 0;'。 –

+0

@Harangue我不認爲這是一個錯字。 –

回答

0

在您的代碼:

  • 你應該設置你的i0在數組的第一
    值開始。

  • 您設置了 另一個變量爲yo文本爲常量,用於追加並使text變量爲空。

如果你想要得到的 「YOYO yomy yobrother」 結果做這樣的事情:

function myFunction() { 
    var cars = ["yo", "my", "brother"]; 

    var len = cars.length; 
    var text = ""; 
    var yotext = "yo"; 

    for (i=0; i < len; i++) { 
    text += yotext +cars[i]+ " "; 
} 
console.log(text); 
}; 

myFunction(); 

Fiddle

0

下面假設你的意思是我初始化爲0

因爲+=操作符將文本附加到現有字符串。你做以下幾點:

第一次迭代:"yo" + "yo" + " " = "yoyo "

第二次迭代:"yoyo " + "my" + " " = "yoyo my "

第三次迭代:"yoyo my " + "brother" + " " = "yoyo my brother "

0

你通常有三個部分,一個for循環:

1 )一個初始化程序 - 給變量一個起始點 2)一個條件 - 只有在它爲真時纔會運行循環 3 )一種改性劑 - 改變的可變

的值。因此一個典型的循環將看起來像這樣:

for (var i = 2; i < len; i++){ 

} 

循環將以這種方式執行:

  1. 初始化i到值爲
  2. 檢查條件是否爲真(2小於3)
  3. 它輸入循環並將cars [2]添加到文本。換句話說,它增加了「兄弟」的文字。
  4. 這個循環的迭代完成。 i ++現在給i增加1。我現在是3.
  5. 檢查條件。我不再小於len(3不小於3)。所以程序從循環中退出。

是否有一個原因,你開始我在2的價值,而不是0?

0

讓我們來分解代碼。

我們有一個數組汽車,其中包含3個項目。然後您聲明i,後者在for循環中用作迭代器(計數器)。我要繼續前進,並認爲是無意的,你的意思爲i在裏面for循環

for (var i=0; i<len; i++) 

一個for循環重複代碼的括號內的指定次數。 for語句的第一部分是第一個分號後面的迭代器。 i將基於語句的第三部分(在此例中爲i++)在每次循環運行時更改。這意味着通過一種提高i for語句的第二部分指出,循環只會重複而i小於len - 在這種情況下,我們的數組中的項目數,3

最後,裏面的for循環有text += cars[i] + "";這就是告訴JavaScript在每次for循環運行時將字符串放在一起。我們先從"yo",然後在每次運行:

i string 
------------------------- 
0 "yoyo " 
1 "yoyo my" 
2 "yoyo my brother" 
0

由於代碼不前面加上「喲」(中text初始值)cars[i]+ " ",而是預先考慮text其與循環變化的值。

我相信你對+=操作符比循環相當困惑。

該行text += cars[i]+ " ";相當於text = text + cars[i]+ " ";

通過您的循環,text的值將隨着每次迭代而改變,如下所示。

- yo 
0 yoyo 
1 yoyo my 
2 yoyo my brother 

因此,text值將在第一循環迭代改變,而且將不再是「球」。所以,難怪「yoyo yomy yobrother」並不奏效。