2013-10-11 104 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