在 Javascript 中递增 (i++ * 2) 之后乘法如何工作?

How works multiplication just after incrementation (i++ * 2) in Javascript?

请在 post 回答之前阅读整个主题。在 post 中找不到此问题的答案:++someVariable Vs。 Javascript

中的 someVariable++
var i = 1;
i = i++ * 2; // i = 2, .. why not 4 ?

解释器执行乘法 (1*2),但增量 ( i++ ) 在哪里?

var i = 1;
i = ++1 * 2; // i = 4 

我明白,i++ 在语句之后进行递增,++i 在语句之前进行递增,但是在这个例子中:i = i++ * 2 // (1*2),解释器如何有效吗?在这种情况下,我的增量在哪里?也许 i = (1*2)+1 )), 或者 i = (1*2) 并且 i 不存在了,没有什么可以增加的??

怎么做?

P.S。我认为,这是一个错误的问题,但正如 Brooks Hanes 所说(在评论中),这是一个学习示例。

i++表示:读取变量i的值,然后增加变量i

++i表示:增加变量i,然后读取变量i的值

这是一个有趣的小问题,一个简单的实验就可以说明发生了什么。 jsFiddle

var i = 3; p = i++ *2; console.log(i, p);

将2乘以i(3)结果(6)放在p中。然后 i (3) 的原始值的副本递增并放回 i 中。此行为在逻辑上与以下内容一致:

var i = 3; var p = 0; function adder(x) { p = x + 2; }; adder(i++); console.log(i, p);

这有点奇怪,因为 post 增量应该发生在语句之后。