递增运算符与循环中的 i + 1

increment operator vs. i + 1 in loop

let eachScore = [10, 20, 30, 40, 50];

let numOfScores = eachScore.length;

let roundNum = 0;

let msg = '';

// if i change (i + 1) to i++, the loop doesn't work as expected

for (i = roundNum; i < numOfScores; i++) {

  msg += 'Round' + (i + 1) + ': ' + eachScore[i] + '<br/>';

}

document.querySelector("#round").innerHTML = msg
<div id="round"></div>

这是我写的代码。 我明白为什么 i++ 无法正常工作

循环每次遇到 i++ 时都会增加 i,但不会增加 (i + 1)。

我不明白为什么 i++ 和 (i + 1) 不一样。为什么 (i + 1) 不像 i++ 那样递增?

我看到了增量运算符的定义。它只是说增量运算符向其操作数和 returns 添加一个值,这似乎是说 i++ 与 (i + 1)...

相同

(i+1) 是一个数字。它返回 Whatever i is 加 1。

i++ 是一个变元。它将 i 设置为 Whatever I is 加上 1。 根据@Samathingamajig:

"i++ mutates i as i = i + 1. but the value returned from it was the previous value of i, so it is a bit different from i = i + 1. ++i does the same mutation but returns the new value of i."

迭代发生了太多,开发人员发现 shorthand 很容易,但您应该始终将 i++ 视为与 i=i+1

相同

For 循环通常遵循以下格式:

for(condition that needs to be met;end condition of loop;What to do at the end of each loop) 在你的例子中,你说 What to do at the end of each loopSet i to whatever i is plus 1

你是对的。 ++A 的 MDN 文档说

The increment operator (++) increments (adds one to) its operand and returns a value.

不幸的是,它没有阐明发生了什么以及为什么使用“pre”(或“post”)来限定“increment”。

变量预自增就是从内存中获取变量的值,加一,结果存回内存,return加法结果作为预自增的结果操作员。之所以称为“预”增量,是因为增量发生在 return 将变量的更新值传递给程序之前。

相比之下,post 递增变量意味着从内存中获取变量的当前值,复制它(可能在 CPU 寄存器中),递增该值并将其保存回内存中 - 然后 return 变量在添加之前的复制值。它称为“post”增量,因为在将值 return 传递给程序后发生增量。

当然,(i+1)只是获取i的值,对其加一,return是表达式的结果,而不更新i的值.


更精确的 MDN 文章版本可以在词汇表中包含“l-value”,并按照以下行描述运算符:

递增运算符 (++) 是一元赋值运算符,它在存储中递增其操作数并 returns 结果。操作数必须是 l-value.

  • 如果++用作前缀运算符,则操作数的增量值return作为运算结果。

  • 如果 ++ 用作 postfix 运算符,则操作数在递增之前的值将 returned 作为运算结果。