簡體   English   中英

對 Javascript 中的 for 循環感到困惑

[英]Confused about the for loop in Javascript

這個函數的結果是:“yoyo my兄弟”。

為什么 yo 只在第一次迭代時添加,為什么結果不是:“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。 謝謝你的幫助。

在您的代碼中:

  • 您應該將i設置為0以從第一個開始
    數組的值。

  • 您將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();

小提琴

以下假設您打算將 i 初始化為 0。

因為+=運算符將文本附加到現有字符串。 您正在執行以下操作:

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

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

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

for 循環通常包含三個部分:

1) 初始值設定項 - 為變量提供一個起點 2) 條件 - 只有在為真時才會運行循環 3) 修飾符 - 更改變量的值

因此,典型的 for 循環如下所示:

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

}

循環將以這種方式執行:

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

您是否有理由將 i 的值從 2 而不是 0 開始?

讓我們分解代碼。

我們有一個數組,汽車,包含 3 個項目。 然后聲明i ,它稍后在 for 循環中用作迭代器(計數器)。 我將繼續假設這是無意的,你的意思是i在 for 循環內

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

for 循環將括號內的代碼重復指定的次數。 for 語句的第一部分,在第一個分號后面,是迭代器。 i將根據語句的第三部分在每次循環運行時進行更改,在本例中為i++ 這意味着將i增加 1。 for 語句的第二部分指出循環只會在i小於len重復 - 在這種情況下,數組中的項目數為 3。

最后,在 for 循環中有一行text += cars[i] + ""; 這告訴 JavaScript 每次 for 循環運行時將字符串放在一起。 我們從"yo"開始,然后在每次運行中:

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

因為代碼沒有將“yo”( text初始值)添加到cars[i]+ " " ,而是將其值隨循環更改的text到前面。

我相信您對+=運算符而不是循環感到困惑。

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

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

- yo
0 yoyo
1 yoyo my
2 yoyo my brother

因此, text的值將在第一次循環迭代中發生變化,並且不再是“yo”。 所以,難怪“yoyo yomy yobrother”行不通。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM