我试图理解以下 d3.js 示例: http://bl.ocks.org/mbostock/3884955
在示例中,有很多行代码如下所示:
data.forEach(function(d) {
d.date = parseDate(d.date);
});
或
x.domain(d3.extent(data, function(d) { return d.date; }));
但是我不知道 d 作为参数传递到哪里以及 d 是什么?这个“魔法”是如何发挥作用的?
最佳答案
在第一个代码段中,d
是数组 data
的一个元素。作为 .forEach()
的第二个参数给出的匿名函数针对数组 data
的每个元素执行,并解析 .date
的 .date
属性数据。
在第二种情况下,d3.extent()
的第二个参数中的匿名函数告诉 D3 如何从 data
中提取用于计算范围的值。也就是说,data
的每个元素都被认为是计算数组中值的范围,但元素也可能是复杂的对象而不是简单的数字。对于数字,不需要第二个参数(访问函数),但对于对象(如本例所示),您需要告诉 D3 要考虑什么值 - 这里是 .date
。
因此,在这两种情况下,匿名函数都会应用于数组 data
中的每个元素,并且传递给它们的参数 d
是数组的相应元素。请注意,这里的名称 d
是任意的,您也可以调用 d
element
或 datum
或类似的名称那个。
关于javascript - 自调用匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28067299/