完整的代碼是如何理解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
...
完整的代碼是如何理解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
...
它是這樣的:
分配:
c = (
20,
function(x) {return x + 100},
function() {return arguments[0]}
);
在指定的最後一個表達式圓括號爲c
。前兩個表達式(20
和function(x) {return x + 100}
)已評估但未在分配中使用。這是comma operator實際操作的示例:用逗號分隔的任何表達式序列都具有最後一個表達式的值。
所以在那一點,c
是功能function() {return arguments[0]}
。
然後,使用參數{x:10}
調用c
,並返回對象{x:10}
。然後,.x
提取x
屬性,該屬性的值爲10.將其添加到b
(其值也爲10),結果將值20賦予a
。
簡單!
首先,讓我們重寫代碼,使其更易於閱讀。
將構建(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
現在有意義嗎?
在JavaScript中,a,b,c
返回c
,所以c = function() {return arguments[0];}
,
c({x:10})
回報{x:10}
,
c({x:10}).x
回報10
所以b+c
回報20
還有什麼不明白嗎? – Blender 2013-03-20 03:35:31
您可以發佈一個關於stackoverflow的問題,標題爲「什麼是c({x:10}).x'在這種情況下做什麼?」 – Wug 2013-03-20 03:36:35