在理解JavaScript函数调用时请提供一些帮助。它是闭包还是递归的?

在理解JavaScript函数调用时请提供一些帮助。它是闭包还是递归的?,javascript,d3.js,Javascript,D3.js,我正在使用D3js到树布局来呈现一些数据,工作结果如下: 我想学习如何正确导航树中的节点。例如,我可以设置一个函数,将所有节点设置为通过单击打开/关闭,或者可能有一个类别索引,以便访问者可以单击第一年的并且该节点和所有子节点都将设置为打开 我已经通过了密码,我的头也绕不开了 function toggleAll(d) { if (d.children) { d.children.forEach(toggleAll); toggle(d); } }

我正在使用D3js到树布局来呈现一些数据,工作结果如下:

我想学习如何正确导航树中的节点。例如,我可以设置一个函数,将所有节点设置为通过单击打开/关闭,或者可能有一个类别索引,以便访问者可以单击第一年的
并且该节点和所有子节点都将设置为打开

我已经通过了密码,我的头也绕不开了

function toggleAll(d) {
    if (d.children) {
        d.children.forEach(toggleAll);
        toggle(d);
    }
}

root.children.forEach(toggleAll);
对我来说,我用
根调用函数,然后如果传递的节点对该
节点的每个
子节点都有
子节点
,我就传递函数名?!当不再有
子项时,即它已到达
时,它将值从
子项
切换到
\u子项
或相反


当我经过forEach
toggleAll
时发生了什么

这里的关键是
forEach
,这是一个本机javascript函数。 (文件)

此方法为数组的每个元素执行回调(
toggleAll
)。
d
参数将通过
forEach
传递给
toggleAll
函数。所以它不是来自于关闭


现在,由于toggall再次调用了forEach
,它确实进入到树的下一级的递归模式,直到
d.children
为空。

如果您不了解发生了什么,您是如何生成此工作代码的

当我通过它时发生了什么

你明白这个问题中“it”指的是什么吗

无论如何,当您使用JavaScript数组(或者至少是类似数组的东西)时,您将调用该方法,该方法接受一个函数并在每个元素上调用该函数。因此,当您第一次在
root.children
上调用forEach时,数组
root.children
中的每个元素都会调用
toggleAll
。然后再次调用forEach(现在以递归方式)以获取任何后续子节点。

我使用了此演示,正如您所看到的,我更改了JSON文档。我已经澄清了我对“it”的用法。