Javascript - 函数参数

Javascript - function argument

本文关键字:参数 函数 Javascript      更新时间:2023-09-26

我正在学习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); });

所以

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

谢谢。

对于您的第一个问题:

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

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

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

你的第二个问题

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

它不需要在其他地方定义,因为它只是一个普通的函数参数。如果您愿意,可以通过以下方式重写它:

function startAngleParam( d ) {
 return d.x;
}
var arc = d3.svg.arc()
.startAngle( startAngleParam )
...
d非常

清楚地作为参数传递给匿名函数。据推测,这些函数可以将数字作为参数,或者用于更复杂的操作的函数(有点像String.replace()如何获取替换字符串,或者运行结果数组并返回替换值的函数)

1:这是一个回调函数。当您将函数作为参数发送时,不会调用该函数,而是保留该函数并可以在以后调用,并且可以在需要时一遍又一遍地调用它。

2:参数 d 只是发送到回调函数的值,该函数使用它来生成结果。标识符名称d仅在回调函数中定义,每当使用该函数时,该值都会像往常一样发送到函数中。

发送到回调函数的值是包含弧坐标的对象。当弧的坐标发生更改时,将调用回调函数来计算绘制弧线所需的其他值。

我还不能发表评论,但想补充一下 Sirko 的出色答案。他指出:

在 d3 中.js您不会为每个切片传递两个角度,而是提供一个函数,该函数接受一个参数d,这是该切片的相应数据元素并返回角度。

我想补充一点,您可能还会遇到表单function(d, i) { ... }的回调。当你看到这个时,d指的是元素的数据,i指的是它的索引 - 约定使用一个字母的缩写,但你可以随意调用参数。

在循环访问数据时,访问这两项可能会很有帮助。例如,在本教程中,数据和索引都用于构造条形图: http://mbostock.github.com/d3/tutorial/bar-1.html