完整的代码是如何理解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