-1

我尝试创建一个递归函数,但一个重要的变量(其他变量也是如此)被循环前的递归调用替换for(){}。我想要变量本地(私有,仅用于当前函数,而不是被递归调用覆盖)......我已经尝试了很多东西......有什么想法吗?

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);

                        };

                    };

                };

            };

        };
};

谢谢,J。

编辑:在 for 循环中的desired.tagel = 1 之前被递归调用覆盖...

4

1 回答 1

0

尽管我并没有真正了解您尝试对代码执行的操作,但只要您想要一个“本地的,私有的”变量,它在所有函数调用中都“保持”相同,并且您可以独立于递归进行更改,我认为你需要一个“静态”变量。看看这篇文章,它可以帮助你:

如何在Javascript中声明一个静态变量

于 2013-10-11T21:28:03.987 回答