阅读这两篇文章后:
我仍然对以下代码感到困惑:
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。
也许看一下规格会有帮助。
num++)生产PostfixExpression:LeftHandSideExpression [此处没有LineTerminator] ++的评估如下:
1.令lhs为计算LeftHandSideExpression的结果。
这只是意味着我们正在查看之前的内容++,例如num中的num++。
2.
SyntaxError如果满足以下所有条件,则引发异常:[为简洁起见,省略]
此步骤确保lhs确实引用了变量。后缀运算符仅适用于变量,例如使用文字1++,将是语法错误。
获取由lhs表示的变量的值,并将其存储在中oldValue。想象它是类似的东西var oldValue = num;。如果num = 0再oldValue = 0为好。
4.使用与+运算符相同的规则,使newValue是将值1添加到oldValue的结果(请参见11.6.3)。
只需将1加到oldValue并将结果存储在中newValue。有点像newValue = oldValue + 1。在我们的例子newValue会1。
5.调用PutValue(lhs,newValue)。
这会将新值再次分配给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)
该算法与后缀运算符完全相同,但有一个区别:在最后一步,newValue返回而不是oldValue:
6.返回newValue。
| 归档时间: |
|
| 查看次数: |
6147 次 |
| 最近记录: |