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



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++那样递增?

我看到了增量运算符的定义。它只是说增量运算符在其操作数上加一并返回一个值,这似乎是在说i++与(i+1(相同。。。

你是对的。++A的MDN文档显示

增量运算符(++(使其操作数递增(加一(并返回一个值。

这很不幸,因为它没有澄清发生了什么以及为什么使用";预";(或"职位"(;增量";。

预增变量意味着从内存中获取变量的值,再加一,将结果存储回内存,并将相加结果作为预增运算符的结果返回。它被称为";预";增量,因为增量发生在将变量的更新值返回到程序之前。

相比之下,对变量进行后增量意味着从内存中获取变量的当前值,对其进行复制(可能在CPU寄存器中(,对值进行增量并将其保存回内存,然后返回变量在添加之前复制的值。它称之为";张贴";增量,因为增量发生在获得要返回到程序的值之后。

当然,(i+1)只是得到i的值,再加一,然后返回表达式的结果,而不更新i的值。


MDN文章的更精确版本可以包括";l值";在词汇表中,并按照以下行描述操作员:

增量运算符(++(是一元赋值运算符,用于在存储中增加其操作数并返回结果。操作数必须是一个l值。

  • 如果++用作前缀运算符,则操作数的递增值将作为运算结果返回。

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

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

CCD_ 9是一个突变子。它正在将i设置为Whatever I is加上1。根据@Samathingamajig:

"i++使i变为i=i+1。但从中返回的值是i的前一个值,所以它与i=i+1有点不同++我有相同的突变但是返回i的新值;

迭代发生得太多了,开发人员发现使用简写很容易,但您应该始终认为i++i=i+1相同

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

用于(condition that needs to be metend condition of loopWhat to do at the end of each loop(在您的示例中,您说What to do at the end of each loopSet i to whatever i is plus 1

相关内容

  • 没有找到相关文章

最新更新