为什么后递增/递减运算符对循环中的变量没有任何影响

Why doesn't a post-increment/decrement operator have any effect on a variable inside a loop?

本文关键字:变量 任何 影响 为什么 运算符 循环      更新时间:2023-09-26
var j = 0;
for( var i = 0; i < 100; i++){
    j = j++;
    console.log(j);
}

上述代码块的输出是 100 个零而不是从 1 到 100 的数字?

j = j + 1; 

另一方面,上面的代码按预期工作。这背后的原因可能是什么?

j++加载当前值j,然后递增变量,然后返回原始值。

j = j++在循环的每次迭代中将 j 的原始值 (0) 重新赋值回 j

如果你只是在循环中单独将j++;放在一条线上,你会看到它确实增加了。

因为它是后增量而不是前增量。首先为 j 的值分配值零,然后递增为新值,该值在下一次迭代中被浪费。

j = j++翻译为:

  1. 加载 j 的值,即零。
  2. 递增j .
  3. 将加载的值存储在步骤 1 中以j。请注意,步骤 2 中的增量丢失,因为它的旧值是在步骤 1 中加载的。

j = ++j翻译为:

  1. 递增j .
  2. 加载递增的j值。
  3. 将加载的值存储回 j

您正在发布递增 j.At j = j++值为 j = 0 并且它保持 0,因为j++将在语句执行后递增该值。你可以只console.log(++j); for 循环。