2016-09-26 60 views
-2

我試圖解決這個神奇的JS:的js魔術需要解釋

var a = 1; 
console.log(a++ + ++a); 

它返回4,我可以理解,這是1 + 3,但這個又是什麼順序?

+4

如果你瞭解後增和預增運營商做的,它變得很明顯。您只需要閱讀文檔以及代碼從左到右執行的知識。 – Xufox

+0

我確實看起來並不明顯。你能把它描述爲1)... 2)... 3)...在你的答案中? –

+2

@Jonasw'2 + 2'與那個有什麼關係? – Xufox

回答

5

a++手段遞增之前返回值

++a意味着收益遞增

後的值

所以要打破你的例子:

var a = 1; 
console.log(a++ + ++a); 
  1. a設置爲1
  2. a++返回1,然後a增加到2(但我們不這樣做,在這一點上與它的任何東西)
  3. ++a增量a並返回3
  4. 然後我們總共有console.log(1 + 3),1來自步驟1和來自步驟3的3
1

進入一個稍微詳細什麼Xufox was saying in the comments section

++a第一增量的值,然後返回一個左值指的是,如果使用的值那麼這將是增加值。

a++首先返回值爲a的舊值,即舊值,然後在下一個完整表達式(即「分號前」)之前的未指定時間增加a值。

後綴增量優先於前綴增量。

這對我幫助很大早在一天,它會幫助你太..

http://en.cppreference.com/w/cpp/language/operator_incdec

3

這個是什麼

序列中的僞規範語言:

  1. 評估除了(a++ + ++a
    1. lval是評估左操作的結果(a++
      1. 獲取a的值並將其分配給oldValue。 (1
      2. newValueoldValue + 1
      3. newValue分配到a。(a == 2
      4. 返回oldValue。 (1
    2. rval是評估右操作數(++a
      1. 獲取的a值,並將其分配給oldValue的結果。 (2
      2. newValueoldValue + 1
      3. newValue分配到a。 (a == 3
      4. 返回newValue。 (3
    3. 返回lval + rval。 (1 + 3
  2. 結果:4