琐碎的for-loop需要解释

时间:2015-11-07 07:57:40

标签: javascript for-loop

由于i += ii = i + i的缩写,因此以下代码

for (var i = 0; i<=10; i++) {
console.log(i += i) }

应输出:

1. 0, because  0 += 0 + 0 (i = 0)
2. 2, because  0 += 1 + 1 (i = 2)
3. 6, because  2 += 2 + 2 (i = 6)
4. 12, because 6 += 3 + 3 (i = 12)

但是,虽然控制台确实输出了值为1. - 3.,即0,2和6,但是我得到的值为14,即14,不是我预测的值(上面的行1. - 4.在执行for循环之前输入了)for-loop将输出(= 12)。 我在这里解释错了什么?

代码本身显然无趣,但我很好奇为什么它的工作方式如此。

4 个答案:

答案 0 :(得分:2)

所以基本上,你在每次迭代中加一个然后加倍的数字,从0开始。

然后你应该得到:0,2,6,14。我认为你的数学,而不是代码,在这里是错误的。

答案 1 :(得分:1)

回想一下for循环有四个部分:初始化,测试,正文和增量。

......他们的工作方式如下:

  1. 初始化
  2. 测试,如果测试为假,则跳转到循环后*
  3. 增量
  4. 转到第2步
  5. 所以,这就是循环的工作方式:

    1. (初始化)i = 0
    2. (测试)由于0<= 10,所以继续
    3. (主体):
      1. 评估i += i:由于i目前为0i = 0 + 0i = 0
      2. 记录
    4. (增量)评估i++。由于i0,因此会变为1
    5. (测试)由于1<= 10,所以继续
    6. (主体):
      1. 评估i += i:由于i目前为1i = 1 + 1i = 2
      2. 记录
    7. (增量)评估i++。由于i2,因此会变为3
    8. (测试)由于3<= 10,所以继续
    9. (主体):
      1. 评估i += i:由于i目前为3i = 3 + 3i = 6
      2. 记录
    10. (增量)评估i++。由于i6,因此会变为7
    11. (测试)由于7<= 10,所以继续
    12. (主体):
      1. 评估i += i:由于i目前为7i = 7 + 7i = 14
      2. 记录
    13. (测试)由于14 <= 10,因此停止
    14. *&#34;测试,如果测试为假,则跳转到循环后#34;从技术上讲,不只是假,而是 falsey 0nullundefinedNaN""或当然,false

答案 2 :(得分:0)

问题是您正在循环内部更新i以及循环本身。这意味着您需要查看这两个更新,以查看i的实际情况。以下是展开的步骤:

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

// i = 0 here
console.log(i += i);
// logged 0 += 0 (0)
// now i will be incremented to 1
console.log(i += i);
// logged 1 += 1 (2)
// increment i to 3
console.log(i += i);
// logged 3 += 3 (6)
// increment i to 7
console.log(i += i);
// logged 7 += 7 (14)
// increment i to 15
// ... etc

看起来您错过了+=也在更新循环内i的事实,而不仅仅是来自++增量器。

答案 3 :(得分:0)

这就是您的代码所做的事情:

1. i starts with 0, then you assign to it 0 + 0. console logs i as 0
2. i increments to 1, then you assign to it 1 + 1. console logs i as 2
3. i increments to 3, then you assign to it 3 + 3. console logs i as 6
4. i increments to 7, then you assign to it 7 + 7. console logs i as 14

请注意,i += ii += i + i不同,而是i = i + i。它是一个赋值,返回的值是i的新值。