Javascript-函数参数

bsr*_*bsr 4 javascript d3.js

我正在学习Javascript,并混淆了以下用法。这些问题可能比特定于d3的更多javaScript。

http://mbostock.github.com/d3/ex/sunburst.html

var arc = d3.svg.arc()
.startAngle(function(d) { return d.x; })
.endAngle(function(d) { return d.x + d.dx; })
.innerRadius(function(d) { return Math.sqrt(d.y); })
.outerRadius(function(d) { return Math.sqrt(d.y + d.dy); });
Run Code Online (Sandbox Code Playgroud)

所以,

  1. startAngle,endAngle等将一个函数作为参数。作为参数而不是数字的参数的基本原理是什么?
  2. 在完整的代码中,没有定义“ d”的位置。我在几乎所有d3程序中都可以看到它。“ d”的作用是什么?如何设置或在哪里传递?

谢谢。

Sir*_*rko 5

第一个问题:

d3.svg.arc对象用于在饼图中创建切片。这些切片中的每一个都需要不同的开始角度和结束角度才能正确显示。

在其中,d3.js您不必为每个切片传递两个角度,而是要提供一个函数,该函数采用一个参数d,该参数是该切片的相应数据元素并返回角度。此处设置的其他参数也是如此。

另一个优点是,一个基准可以包含多个属性,并且您可以决定哪个属性相对于可视化而言属于哪一部分。

你的第二个问题

当使用一个函数作为另一个函数的参数时,通常使用给定形式的函数表达式。在d3.js大多数用作参数的函数中,它们本身会传入一个或两个参数(大多数情况下需要转换的数据部分)。在函数表达式中,您需要(或至少应该)命名这些参数以便对其进行寻址。该示例中的大多数时间d都用作保存特定数据项的参数的参数名。

它只是普通的函数参数,因此无需在其他地方定义。如果愿意,可以按以下方式重写它:

function startAngleParam( d ) {
 return d.x;
}

var arc = d3.svg.arc()
.startAngle( startAngleParam )
...
Run Code Online (Sandbox Code Playgroud)