++ num和num ++之间的区别

Hel*_*rld -2 javascript

阅读这两篇文章后:

我仍然对以下代码感到困惑:

var num = 0;

num++ // returns 0

++num // returns 1
Run Code Online (Sandbox Code Playgroud)

为什么剂量num++返回0?

我知道它先分配,然后再添加一个,但是我仍然不明白为什么它不显示1。

var num = 0;

num++ // returns 0

num // returns 1
Run Code Online (Sandbox Code Playgroud)

我对以下示例感到非常困惑:

例:

var num = 0;

num++
// assigns then increments

// So if it assigns the num = 0, then increments to 1, Where is one being 
//stored? Is it assigned anywhere?
Run Code Online (Sandbox Code Playgroud)

还是分配表达式。

(我想表达是这样的:num = num + 1;)

这可能是我的最佳猜测,但对我来说还不是100%清楚,我仍然不明白为什么num ++显示/返回0而不是对表达式求值并返回1。

Fel*_*ing 5

也许看一下规格会有帮助。

后缀增量运算符num++

生产PostfixExpression:LeftHandSideExpression [此处没有LineTerminator] ++的评估如下:

1.lhs为计算LeftHandSideExpression的结果。

这只是意味着我们正在查看之前的内容++,例如num中的num++

2.SyntaxError如果满足以下所有条件,则引发异常:[为简洁起见,省略]

此步骤确保lhs确实引用了变量。后缀运算符仅适用于变量,例如使用文字1++,将是语法错误。

3.oldValueToNumberGetValuelhs))。

获取由lhs表示的变量的值,并将其存储在中oldValue。想象它是类似的东西var oldValue = num;。如果num = 0oldValue = 0为好。

4.使用与+运算符相同的规则,使newValue是将值1添加到oldValue的结果(请参见11.6.3)。

只需将1加到oldValue并将结果存储在中newValue。有点像newValue = oldValue + 1。在我们的例子newValue1

5.调用PutValuelhsnewValue)。

这会将新值再次分配给lhs。等效为num = newValue;。现在num也是如此1

6.返回oldValue

返回其值oldValue仍然为0

 

同样,在伪JavaScript代码中,num++等效于:

var oldValue = num;           // remember current value
var newValue = oldValue + 1;  // add one to current value
num = newValue;               // sore new value
return oldValue;              // return old value
Run Code Online (Sandbox Code Playgroud)

前缀增量运算符(++ num)

该算法与后缀运算符完全相同,但有一个区别:在最后一步,newValue返回而不是oldValue

6.返回newValue