javascript - 请帮助理解 JavaScript 函数调用。是闭包还是递归?

标签 javascript d3.js

我正在使用 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/

相关文章:

javascript - 在 AMMAP 中动态设置和缩放国家 map

javascript - AngularJS 报错(ngRoute、DevExtreme、TypeScript)

javascript - <body> 中的 JS 在 FF 4 上不起作用?

javascript - d3js 盒须图 : add a single circle to plot given a point in the distribution

javascript - 想在同一页面的 d3 中为不同的数据集生成多个图表

javascript - anchor ng-click 调用 2 个方法

javascript - 如何在fabric js中保留图像的位置

javascript - 如何使用 React 创建 d3 力布局图

javascript - D3 旋转文本 : smoothing in Chrome?

javascript - 尝试获取条形图 d3.js 中 y 轴标签旁边的圆圈