js 递归 传入的变量值每次在递归时被初始化了

代码如下:

 function recursionNode(html, node) {
    if (node.length > 0) {
        var len = node.length;
        for(var i = 0; i < len; i++) {
            var cnode = node[i];
            if (cnode.children != null) {
                recursionNode(html,cnode.children);
            } else {
                var jsonData = $.toJSON(cnode.data);
                var obj = $.parseJSON(jsonData);
                if (obj.type == 'Department') {
                    html += "<div>"+obj.name+"</div>";
                }
            }
        }
    }
}

在js中递归调用时,每次递归时html都被初始化成html = "";但在java中我一直是这么写的,html变量的值会叠加,为什么js中就不行?

var html="";
function recursionNode( node) {
if (node.length > 0) {
var len = node.length;
for(var i = 0; i < len; i++) {
var cnode = node[i];
if (cnode.children != null) {
recursionNode(cnode.children);
} else {
var jsonData = $.toJSON(cnode.data);
var obj = $.parseJSON(jsonData);
if (obj.type == 'Department') {
html += "

"+obj.name+"
";
}
}
}
}
}
recursionNode(node);
console.log(html)

你有一个作为全局变量的html么?换一个变量名看看

recursionNode(html,cnode.children);
->
return recursionNode(html,cnode.children);
或者下面加上return html;
没仔细看你的逻辑

function recursionNode(node) {
var html="";
if (node.length > 0) {
var len = node.length;
for(var i = 0; i < len; i++) {
var cnode = node[i];
if (cnode.children != null) {
recursionNode(html,cnode.children);
} else {
var jsonData = $.toJSON(cnode.data);
var obj = $.parseJSON(jsonData);
if (obj.type == 'Department') {
html += "

"+obj.name+"
";
}
}
}
}
return html;
}

//递归使用时,可以这样
html+=recursionNode(node);