Javascript 递归函数中断

Javascript 递归函数中断,javascript,recursion,tree,Javascript,Recursion,Tree,下面的代码对一棵树进行后序遍历。其目的是在调用方法在特定条件下返回false时中断递归(请参见下面的\u walkTree()) 函数walkPostOrder(树、回调、ctx){ var continueWalk=true; 函数_walk(树、回调、ctx、父函数){ for(var idx=0,length=tree.length;idx0&&continueWalk) _walk.call(this,node.children,callback,ctx,node); continueW

下面的代码对一棵树进行后序遍历。其目的是在调用方法在特定条件下返回false时中断递归(请参见下面的
\u walkTree()

函数walkPostOrder(树、回调、ctx){
var continueWalk=true;
函数_walk(树、回调、ctx、父函数){
for(var idx=0,length=tree.length;idx0&&continueWalk)
_walk.call(this,node.children,callback,ctx,node);
continueWalk=callback.call(ctx、节点、父节点、树、idx);
继续;
}; 
console.log(节点);
打破
}; 
} 
_步行(树、回调、ctx);
} 
var json=[{text:“root”,子项:[
{id:“id_1”,文本:“node_1”,子项:[
{id:“id_c1”,文本:“node_c1”},
{id:“id_c2”,文本:“node_c2”,子项:[
{id:“id_c2_c1”,文本:“node_c2_c1”},
{id:“id_c2_c2”,文本:“node_c2_c2”},
{id:“id_c2_c3”,文本:“node_c2_c3”},
{id:“id_c3”,文本:“node_c3”}]},
{id:“id_2”,文本:“node_2”}]};
//迭代
(函数_walkTree(){
_调用(这个,json,函数(节点,父节点,兄弟节点,idx){
console.log(node.id);
if(node.id==“id_c2_c2”)返回false;
返回true;
},这个);
})(); 
我遇到的问题是,
continueWalk
标记在被回调设置为
false
后返回到
true
。其目的是,它应该在该点中断循环,并中断上面递归函数的所有循环


这个提琴演示应该清楚地表明:

您在这里覆盖了
continueWalk

if(node.children && node.children.length > 0 && continueWalk) 
    _walk.call(this, node.children, callback, ctx, node); 
continueWalk = callback.call(ctx, node, parent, tree, idx); 
// ^^^^^^^^^^

您需要检查
continueWalk
的内容,这是之前调用一行代码的结果。

您使用了debugger吗?@Slavik谢谢,这就是我发现错误的原因。如果我现在看到的话。谢谢你,尼娜!
if(node.children && node.children.length > 0 && continueWalk) 
    _walk.call(this, node.children, callback, ctx, node); 
continueWalk = callback.call(ctx, node, parent, tree, idx); 
// ^^^^^^^^^^