JavaScript中的递归函数

3
也许这是一个琐碎的问题,我不知道为什么当它进入else语句时,这个函数会退出for循环。我需要这个函数来获取一个XML文档。
function xmlToArray(element){
    childs= element.childNodes;
    if(childs.length != 1){
      for(var i=0;i<childs.length;i++){
        if(childs[i].hasChildNodes()){
          xmlToArray(childs[i]);
        }
        alert("exit from if");
      }//end for
      alert("exit from for");
    }//end if
    else{
      alert("do something with element");
    }
    alert("end of func");
}

你的意思是每次迭代遇到else时,它完全从堆栈中删除,还是只是它所在的层级? - Tarka
1个回答

8

由于childs不是局部变量,所有对xmlToArray的调用都在同一数据上工作。

试试这个:

function xmlToArray(element) {
    var childs = element.childNodes;
    // …
}

使用var关键字可以在当前作用域声明变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接