2013-03-20 55 views
1

完整的代碼是如何理解c({x:10})。x?

var b = 10, 
    c = (
      20, 
      function(x) {return x + 100}, 
      function() {return arguments[0]} 
     ); 
a = b + c({x:10}).x // => 20 

我如何理解c({x:10}).x ...

+1

還有什麼不明白嗎? – Blender 2013-03-20 03:35:31

+0

您可以發佈一個關於stackoverflow的問題,標題爲「什麼是c({x:10}).x'在這種情況下做什麼?」 – Wug 2013-03-20 03:36:35

回答

0

它是這樣的:

分配:

c = (
     20, 
     function(x) {return x + 100}, 
     function() {return arguments[0]} 
    ); 

在指定的最後一個表達式圓括號爲c。前兩個表達式(20function(x) {return x + 100})已評估但未在分配中使用。這是comma operator實際操作的示例:用逗號分隔的任何表達式序列都具有最後一個表達式的值。

所以在那一點,c是功能function() {return arguments[0]}

然後,使用參數{x:10}調用c,並返回對象{x:10}。然後,.x提取x屬性,該屬性的值爲10.將其添加到b(其值也爲10),結果將值20賦予a

簡單!

6

首先,讓我們重寫代碼,使其更易於閱讀。

將構建(x, y, z)計算到最後一個項目(z),所以:

var b = 10, c = function() { return arguments[0] }; 
a = b + c({ x: 10 }).x // => 20 

現在,c函數只是返回第一個參數,這是一種毫無意義的在這裏,讓我們將其刪除:

var b = 10; 
a = b + ({ x: 10 }).x // => 20 

對象常量{ x: 10 }也沒用這裏,因爲我們只得到了x屬性,然後將其丟棄,那麼:

var b = 10; 
a = b + 10 // => 20 

現在有意義嗎?

0

在JavaScript中,a,b,c返回c,所以c = function() {return arguments[0];}

c({x:10})回報{x:10}

c({x:10}).x回報10

所以b+c回報20