【问题标题】:Confused about the for loop in Javascript对 Javascript 中的 for 循环感到困惑
【发布时间】:2016-07-13 22:19:33
【问题描述】:

这个函数的结果是:“yoyo my brother”。

为什么 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。感谢您的帮助。

【问题讨论】:

  • 您分享的代码中是否有拼写错误?您在 for 循环之外声明 i
  • 为什么会是"yoyo yomy yobrother"?此外,您可能希望将i 定义为:var i = 0;
  • @Harangue 我不认为这是一个错字。
  • 我认为这是一个错字,循环将使用他的代码运行一次,文本的值将是“哟兄弟”。

标签: javascript for-loop iteration


【解决方案1】:

因为代码没有将“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”不成功。

【讨论】:

    【解决方案2】:

    在您的代码中:

    • 您应该将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();
    

    Fiddle

    【讨论】:

      【解决方案3】:

      让我们分解代码。

      我们有一个数组,汽车,它包含 3 个项目。然后你声明i,它稍后在for循环中充当你的迭代器(一个计数器)。我将继续假设这是无意的,您的意思是 i 在 for 循环内

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

      for 循环将其括号内的代码重复指定次数。 for 语句的第一部分,在第一个分号后面,是迭代器。 i 将根据语句的第 3 部分在每次运行循环时更改,在本例中为 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"
      

      【讨论】:

        【解决方案4】:

        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 开始?

        【讨论】:

          【解决方案5】:

          以下假设您打算将 i 初始化为 0。

          因为+= 运算符将文本附加到现有字符串。您正在执行以下操作:

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

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

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

          【讨论】:

            猜你喜欢
            • 2017-05-03
            • 1970-01-01
            • 2020-12-11
            • 1970-01-01
            • 1970-01-01
            • 2011-09-08
            • 2017-03-23
            • 2018-10-03
            • 1970-01-01
            相关资源
            最近更新 更多