var i=1;
i=i++;
alert(i);
为什么i=1?
1.左边i先赋值给右边,i=1;
2.i++,之后i不就是2了吗?就算不赋值,也应该是2额。。
var i=1;
i=i++;
alert(i);
为什么i=1?
1.左边i先赋值给右边,i=1;
2.i++,之后i不就是2了吗?就算不赋值,也应该是2额。。
首先,赋值运算符=
是把右边的值赋给左边。
然后,自增运算符“++”放在变量后面即i++
的意思是先使用变量,再将变量i的值加1。如果放在变量前面即++i
的意思是先将变量i的值加1,再使用变量
举例:
var i = 1;
var j = i++;
alert(j); // 1,先为j赋i的值1,
alert(i); // 2,然后执行++,i的值加1,2
那么为什么你的代码结果i是1呢?
var i = 1;
i = i++;
alert(i); // 1
这是因为js中,变量的值是不能重新赋值的。重新为一个变量赋值,会申请一个新变量,为其赋值并销毁原来的变量。 本例中,i = i++
其实是先在内存中申请一个空间,里面填充1(i的值),然后让变量i指向这块内存空间,而存放这i++得来的2的那块内存,已经索引不到了,一会儿其所占内存就被回收了
=
++
这些本质上都是运算符,地位是平等的。
这确实是运算符优先级的问题,但曲奇芒果说的应该有毛病。
因为赋值运算符=
的优先级是最低的,是最后做运算的,而不是先做a=b运算。赋值运算符=
作为operator,它的两个operand分别是左边的variable i和右边的一个expression i++
,这次运算是将这个表达式的值赋给变量i,是最后操作的。
++后置运算符的效果是returns the value before incrementing
, 变量i在这次运算确实被赋值为2,但是这个表达式的值是1,此后,由于优先级最低的运算最后运行,又将这个1赋值给了变量i,所以最终i的值为1
php
i++同i=i+1; (i++)这个表达式的值是i ++i同i=i+1; (++i)这个表达式的值是i+1 var x = 3; y = x++; // y = 3, x = 4 var a = 2; b = ++a; // a = 3, b = 3
as for priority, "++">"="
所以么,i++和++i的区别就是return old和new的区别
不知道这个return这个词用对不对.望指教
<?php
$i = 4;
$i = $i++; //$i++的运算结果是4,此时$i的值是5,但因为把结果4又赋值给了$i,所以最终$i为4.
echo $i."\n"; //输出4,而不是5.
7 回答3.9k 阅读✓ 已解决
12 回答5.6k 阅读✓ 已解决
16 回答6k 阅读
9 回答3.9k 阅读
7 回答4.4k 阅读✓ 已解决
10 回答3.5k 阅读
1 回答1.8k 阅读✓ 已解决
注意這兩句:
Let rval be GetValue(rref).
Call PutValue(lref, rval).
也就是說,首先執行 i++,此時 i 被賦值 2,並返回 1,然後再賦值 1 給 i,最終 i 爲 1。
簡單地說,
等價於
當然
也可以用一個簡單的實驗看出:
可見 i++ 賦值 i 必定早於 i = (...) 的賦值。
上面的內容等價於:
等價於
i = ++i
; (實際上引擎可能會省略 temp (rval) 的賦值)