1

完整的代码是

    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...

4

3 回答 3

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

现在有意义吗?

于 2013-03-20T03:42:50.593 回答
0

它是这样的:

那作业:

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

将括号中的最后一个表达式分配给c. 前两个表达式 (20function(x) {return x + 100}) 被求值但不在赋值中使用。这是逗号运算符的一个示例:任何由逗号分隔的表达式序列都具有最后一个表达式的值。

所以在那一点上,c就是函数function() {return arguments[0]}

然后,c使用参数调用{x:10}并返回 object {x:10}。然后.x提取值为 10 的x属性。将其添加到b(其值也为 10)以将值 20 分配给a

简单的!

于 2013-03-20T03:42:38.230 回答
0

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

c({x:10})返回{x:10},

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

所以b+c返回20

于 2013-03-20T03:43:17.737 回答