在阅读了这两篇文章之后:
我仍然对以下代码感到困惑:
var num = 0;
num++ // returns 0
++num // returns 1为什么num++返回0?
我知道它首先分配,然后添加一个,,但我仍然不明白为什么它不显示1.。
var num = 0;
num++ // returns 0
num // returns 1我真的对下面的例子感到困惑:
示例:
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?或者它指定了表达式。
(我想这个表达式是: num = num + 1;)
这可能是我最好的猜测,但我仍然不明白为什么num++显示/返回0,而不是让表达式被计算并返回1。
发布于 2014-10-22 15:37:11
也许看看说明书会有帮助。
后缀增量算子 (num++)
production : LeftHandSideExpression no LineTerminator here ++的评估如下: 1.让lhs成为评价LeftHandSideExpression的结果。
这仅仅意味着我们正在查看++之前的内容,例如num++中的num。
如果以下条件都为真,则2.抛出一个
SyntaxError异常:
这个步骤确保lhs确实引用了一个变量。后缀操作符只处理变量,例如使用文本1++,这将是语法错误。
3. oldValue be ToNumber(GetValue(lhs))。
获取由lhs表示的变量的值,并将其存储在oldValue中。想象一下这是一种类似于var oldValue = num;的东西。如果是num = 0,那么oldValue = 0也是。
4.让newValue是向oldValue添加值1的结果,使用与+操作符相同的规则(参见11.6.3)。
只需将1添加到oldValue中并将结果存储在newValue中。有点像newValue = oldValue + 1。在我们的例子中,newValue将是1。
5. Call 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前缀增量算子 (++num)
算法与后缀操作符完全相同,但有一个不同之处:在最后一步中,返回newValue而不是oldValue
发布于 2014-10-22 15:09:01
以下列例子为例:
var num = 0;
var result = 0;以下内容如下:
result = num++; 等于说:
result = num;
num = num + 1;另一方面,这是:
result = ++num;在这一点上更为公平:
num = num + 1;
result = num;这两种说法有点像做普通操作的速记。
发布于 2014-10-22 15:10:28
当您将num++作为语句输入时,JavaScript将首先计算num --这就是它显示零的原因--然后是增量。这就是为什么它被称为后增量运算符。
如果你要这么做,你会更清楚地看到发生了什么:
var num = 0;
num++;        // Outputs 0 (current value, set in previous step), then increments
num;          // Outputs 1 (current value, incremented in previous step)使用预增量时,增量首先发生,因此您将得到:
var num = 0;
++num;        // Outputs 1
num;          // Outputs 1https://stackoverflow.com/questions/26510679
复制相似问题