【发布时间】:2023-03-26 10:18:01
【问题描述】:
过去几天我一直在尝试解决这个问题,但直到现在我还没有找到解决方案。
下面的代码递归地在图上查找路径。它似乎不是输出带有四个节点的nodePath,而是输出“一个nodePath”,每个周期都有一个新添加的节点(导致路径从1个增加到200多个节点)。递归路径调用似乎没有创建一个新的“nodePath”,但它使用了邻居[node_nw] 和深度。
var startNode = s.graph.nodes('n0');
var emptyNodeRoute = [];
path(startNode, 0, emptyNodeRoute);
function path (node, depth, nodePath) {
nodePath.push(node);
if (depth == 3) {
printPath (nodePath);
} else {
depth ++;
var neighbors = s.graph.neighbors(node.id);
for (var node_nw in neighbors) {
(function() {
path (neighbors[node_nw], depth, nodePath);
}());
}
}
}
//prints node route
function printPath (nodePath) {
var str = '';
for(var k = 0; k < nodePath.length; k++) {
str = str.concat(' ', nodePath[k].label);
}
console.log ('nodePath: ' + str);
}
我想这与 javascript 关于(无)块作用域、闭包和递归的特殊性有关?或者也许我忽略了一些小东西?我在这个网站上引用了几个资源(包括http://zef.me/2843/javascript-the-scope-pitfall)和主题,但没有一个能帮助我解决这个问题。
任何帮助将不胜感激!
【问题讨论】:
标签: javascript for-loop recursion scope