【问题标题】:Javascript - How does "++i" work?Javascript - “++i”如何工作?
【发布时间】:2014-10-08 17:23:53
【问题描述】:

在尝试使用“i++”和“++i”后,在“for”循环中使用时,我找不到它们的结果之间的差异。 例如:

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

会产生:

0
1
2
3
4
5
6
7
8
9

不应该打印出从 1 到 10 的数字吗,因为迭代器在 console.log(i) 执行之前递增?

【问题讨论】:

标签: javascript for-loop iterator console.log


【解决方案1】:

“增量步”循环体执行后执行。给定

for (a;b;c) {
  d
}

执行顺序是

a // initialize
b // condition - first iteration
d // loop body
c // "increment"
b // condition - second iteration
d // loop body
c // "increment"
...
b // condition - last iteration - break

所以在你的情况下:

var i = 0;
i < 10;
console.log(i); // 0
++i;
i < 10;
console.log(i); // 1
++i;
// ...
i < 10;

i++++i 之间的区别仅在您使用返回值执行某些操作时才相关,而您没有这样做。

【讨论】:

  • 好答案。另外,一个有趣的注释...假设 i++ 和 ++i 在 javascript 中的工作方式与 C 类似, ++i 作为一种简单递增的方法(例如在您的示例中)会稍微快一些。 ++i 立即增加值,而 i++ 实际上必须复制其值以支持后增量。
  • @Jeff:很有趣。至少根据 ECMAScript 规范,这两者之间没有真正的区别:es5.github.io/#x11.3.1es5.github.io/#x11.4.4。步骤与上一个步骤完全相同。
【解决方案2】:

因为for 循环的最后一个子句只发生在循环的末尾,作为它自己的语句,循环的行为不受这种差异的影响。然而,想象一下你做了这样的事情:

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

然后你会看到不同。第一个示例将生成数字 1-10,而第二个示例将生成数字 0-9。这是因为f(j++) 等价于j += 1; f(j);,而f(++i) 更像f(i); i += 1;

【讨论】:

    【解决方案3】:

    我可以建议,尽管您在使用的任何平台上都可以进行测试,但标准构造是 i++

    始终对标准进行编码并隔离各种平台并根据需要进行异常处理!!!

    i++ 只是意味着将“i”加一。

    我可以推测 ++i 意味着将 'i' 添加到自身,例如,如果 'i' 为 2,那么它将增加到 2,4,8,16,32

    但我从未见过 ++i 在很多地方使用过。

    【讨论】:

    • i++(后增量)和++i(前增量)在类似 C 的语言中都是非常标准的操作。当然,后者并不常见,但它仍然是标准的。 i++ 表示“将i 增加一并返回i 的旧值”。 ++i 表示“将i 增加一并返回i 的新值”。见stackoverflow.com/questions/3469885/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 2017-03-24
    • 2014-05-13
    • 2016-07-05
    • 1970-01-01
    • 2015-04-13
    • 2012-06-18
    相关资源
    最近更新 更多