由于i += i
是i = 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
)。
我在这里解释错了什么?
代码本身显然无趣,但我很好奇为什么它的工作方式如此。
答案 0 :(得分:2)
所以基本上,你在每次迭代中加一个然后加倍的数字,从0开始。
然后你应该得到:0,2,6,14。我认为你的数学,而不是代码,在这里是错误的。
答案 1 :(得分:1)
回想一下for
循环有四个部分:初始化,测试,正文和增量。
......他们的工作方式如下:
所以,这就是循环的工作方式:
i = 0
0
是<= 10
,所以继续i += i
:由于i
目前为0
,i = 0 + 0
为i = 0
。i++
。由于i
为0
,因此会变为1
1
是<= 10
,所以继续i += i
:由于i
目前为1
,i = 1 + 1
为i = 2
i++
。由于i
为2
,因此会变为3
3
是<= 10
,所以继续i += i
:由于i
目前为3
,i = 3 + 3
为i = 6
i++
。由于i
为6
,因此会变为7
7
是<= 10
,所以继续i += i
:由于i
目前为7
,i = 7 + 7
为i = 14
14
不 <= 10
,因此停止 *&#34;测试,如果测试为假,则跳转到循环后#34;从技术上讲,不只是假,而是 falsey ,0
,null
,undefined
,NaN
,""
或当然,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 += i
与i += i + i
不同,而是i = i + i
。它是一个赋值,返回的值是i
的新值。