下面是一個簡單的演示:混淆關於JavaScript增量運算
var foo = 1;
foo = foo++;
console.log(foo) // 1
爲什麼foo
結果1
,不2
?
我覺得foo++
表達式返回1
第一,但隨後本身增加2
,覆蓋1
價值,所以爲什麼foo
結果不2
?
下面是一個簡單的演示:混淆關於JavaScript增量運算
var foo = 1;
foo = foo++;
console.log(foo) // 1
爲什麼foo
結果1
,不2
?
我覺得foo++
表達式返回1
第一,但隨後本身增加2
,覆蓋1
價值,所以爲什麼foo
結果不2
?
該代碼使得這些操作的順序發生:
foo++
評估爲1
foo
由++
遞增到2
1
(計算表達式的結果)傳遞左foo = 1
導致該值被分配到foo
(覆蓋2
)。雖然我不能完全肯定,但根據operator precedence我覺得在這一行
foo = foo++;
1)的++
經營者有更高的優先級是什麼。它必須做的是返回foo
的當前值。之後,遞增foo
的值。
2)的=
經營者有優先級高,因此,它會得到從操作++
這是1
返回值,它會的foo
值設置爲1
。因爲增量發生在這兩個操作之間,所以它失去了它的價值。並且foo
的最終值是1
。
因爲我不完全確定,如果有任何問題糾正我。謝謝。
當滿足分號時,不會發生增加,但在表達式'foo ++'產生'1'之前不會發生增加。 – Bergi 2014-08-28 09:45:36