我正在努力理解这段 JavaScript 代码是如何工作的。我正在学习 JS,之前没有接触过动态的函数式语言。因此,我以位过程、分层顺序可视化函数调用。使用 d3.js,可以绘制 svg 元素,如此处所述
var dataset = [ 5, 10, 15, 20, 25 ];
d3.select("body").selectAll("p")
.data(dataset)
.enter()
.append("p")
.text("New paragraph!");
让我们更改最后一行:
.text(function(d) { return d; });
在此演示页面上查看新代码的作用。
哇!我们使用我们的数据来填充每个段落的内容,这一切都归功于 data() 方法的魔力。您会看到,当将方法链接在一起时,在您调用 data() 之后的任何时候,您都可以创建一个接受 d 作为输入的匿名函数。给定当前元素,神奇的 data() 方法可确保将 d 设置为原始数据集中的相应值。
上面提到的这个魔法是我无法理解的。"d" 不是全局变量,就像我换成另一个 (c) 名称一样,它仍然有效。因此,该data
方法可能正在设置匿名 fn 的值。
但是,通常(我的阅读有限)链接是可能的,因为当前函数返回一个对象,可以在该对象上调用下一个方法。在上述情况下,data
方法如何知道用户是否传递了文本(“新段落!”),否则将数据传递给匿名 fn。怀疑是,该text
方法已经下线并且data()
已经执行。数据如何传递给匿名函数?
谢谢。