完整的代码是
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
...
完整的代码是
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
...
首先,让我们重写代码,使其更易于阅读。
该构造(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
现在有意义吗?
它是这样的:
那作业:
c = (
20,
function(x) {return x + 100},
function() {return arguments[0]}
);
将括号中的最后一个表达式分配给c
. 前两个表达式 (20
和function(x) {return x + 100}
) 被求值但不在赋值中使用。这是逗号运算符的一个示例:任何由逗号分隔的表达式序列都具有最后一个表达式的值。
所以在那一点上,c
就是函数function() {return arguments[0]}
。
然后,c
使用参数调用{x:10}
并返回 object {x:10}
。然后.x
提取值为 10 的x
属性。将其添加到b
(其值也为 10)以将值 20 分配给a
。
简单的!
在 javascript 中,a,b,c
返回c
,所以c = function () {return arguments[0];}
,
c({x:10})
返回{x:10}
,
c({x:10}).x
返回10
所以b+c
返回20