2013-10-11 69 views
-1

我尝试做一个递归函数,但是一个重要的变量(其他人也被)在for(){}循环之前被递归调用所取代。我想要的变量本地(私人,只为当前的功能,并没有通过递归调用overrided)...我已经尝试了很多东西...任何想法?调用递归函数并保持本地变量

function parseChilds(elements, desired, array){ 

     if(!isArray(elements)){ 

      if(elements instanceof NodeList){ 

       elements = objectToArray(elements); 

      } 
      else { 

       elements = [elements]; 

      }; 

     }; 

     for(var el = 0; el < elements.length; el++){ 

      console.log("EL", elements[el], desired); 
      if(elements[el].tagName.toLowerCase() === desired.tag[0] && desired.tag.length === 1){ 

       array.push(elements[el]); 

      }; 

      if(elements[el].nodeType === 1){ 

       var childrens = elements[el].children; 

       if(childrens.length > 0 && desired.tag.length > 1){ 

        desired.tag = arrayRemoveFirst(desired.tag); 

        for(var child = 0; child < childrens.length; child++ ){ 

         if(childrens[child].nodeType === 1){ 

          parseChilds(childrens[child], desired, array); 

         }; 

        }; 

       }; 

      }; 

     }; 
}; 

THX,J.

编辑:desired.tag是在for循环EL = 1之前的递归调用overrided ...

+1

也许你能告诉我们哪些变量,这样我们就不必搜索它的代码;) – Asped

+0

你的问题不明确。 'desired'被传递给你的递归调用。你可以在递归调用中做任何你想要的东西,只要传递任何你想传入的东西。 – jfriend00

+0

@Asped 我试试: var el = 0; while(elements [el]){ ... ... el ++; }; 但这并没有改变任何东西。 – Jordan

回答

0

虽然我真的不明白你是什么试着处理你的代码,只要你想拥有一个“本地,私有”变量,在所有的函数调用中“保持”相同,你可以独立地改变它的递归,我认为你需要一个“静态“变量。看看这篇文章,它可以帮助你:

How to declare a static variable in Javascript

+0

我第一次调用函数,它看起来像:parseChilds(elements,desired,array);元素包含两个头(NodeList),期望包含标签,desired.tag是一个数组=>“h1”,“span”,“b”。每次我调用parseChilds Fn时,我都会删除desired.tag中的第一个,但我只想在desired.tag的最后一个实例上删除它,我不想影响/覆盖ancestor desired.tag。 我清楚吗? – Jordan