2013-03-20 63 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