我正在使用 D3js 进行树布局来呈现一些数据,工作结果如下:
http://jsfiddle.net/chrisloughnane/vV3Sc/
我想学习如何正确导航树中的节点。例如,我可以设置一个函数,通过单击将所有节点设置为打开/关闭,或者可能有一个类别索引,以便访问者可以单击year one
,并且该节点和所有子节点都会被设置打开。
我已经单步执行了代码,但我无法理解
function toggleAll(d) {
if (d.children) {
d.children.forEach(toggleAll);
toggle(d);
}
}
root.children.forEach(toggleAll);
对我来说,我使用root
调用该函数,然后如果传递的节点对于该节点的每个
我向它传递函数名称?!当不再有 child
都有children
children
时,即它已到达 leaf
时,它将值从 children
切换为 _children
或逆。
当我传递 forEach toggleAll
时会发生什么?
最佳答案
这里的关键是forEach
,它是一个原生的javascript函数。
(文档here)
此方法为数组的每个元素执行回调 (toggleAll
)。
d
参数将通过 forEach
传递给 toggleAll
函数。所以它不是来自闭包。
现在,由于toggleAll再次调用forEach
,它确实进入了树的下一层的递归模式,直到d.children
为空。
关于javascript - 请帮助理解 JavaScript 函数调用。是闭包还是递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100783/