在理解JavaScript函数调用时请提供一些帮助。它是闭包还是递归的?
我正在使用D3js到树布局来呈现一些数据,工作结果如下: 我想学习如何正确导航树中的节点。例如,我可以设置一个函数,将所有节点设置为通过单击打开/关闭,或者可能有一个类别索引,以便访问者可以单击第一年的在理解JavaScript函数调用时请提供一些帮助。它是闭包还是递归的?,javascript,d3.js,Javascript,D3.js,我正在使用D3js到树布局来呈现一些数据,工作结果如下: 我想学习如何正确导航树中的节点。例如,我可以设置一个函数,将所有节点设置为通过单击打开/关闭,或者可能有一个类别索引,以便访问者可以单击第一年的并且该节点和所有子节点都将设置为打开 我已经通过了密码,我的头也绕不开了 function toggleAll(d) { if (d.children) { d.children.forEach(toggleAll); toggle(d); } }
并且该节点和所有子节点都将设置为打开
我已经通过了密码,我的头也绕不开了
function toggleAll(d) {
if (d.children) {
d.children.forEach(toggleAll);
toggle(d);
}
}
root.children.forEach(toggleAll);
对我来说,我用根调用函数,然后如果传递的节点对该节点的每个子节点都有子节点,我就传递函数名?!当不再有子项时,即它已到达叶
时,它将值从子项
切换到\u子项
或相反
当我经过forEachtoggleAll
时发生了什么 这里的关键是forEach
,这是一个本机javascript函数。
(文件)
此方法为数组的每个元素执行回调(toggleAll
)。
d
参数将通过forEach
传递给toggleAll
函数。所以它不是来自于关闭
现在,由于toggall再次调用了forEach
,它确实进入到树的下一级的递归模式,直到d.children
为空。如果您不了解发生了什么,您是如何生成此工作代码的
当我通过它时发生了什么
你明白这个问题中“it”指的是什么吗
无论如何,当您使用JavaScript数组(或者至少是类似数组的东西)时,您将调用该方法,该方法接受一个函数并在每个元素上调用该函数。因此,当您第一次在root.children
上调用forEach时,数组root.children
中的每个元素都会调用toggleAll
。然后再次调用forEach(现在以递归方式)以获取任何后续子节点。我使用了此演示,正如您所看到的,我更改了JSON文档。我已经澄清了我对“it”的用法。