【问题标题】:Call recursive function and keep variable local调用递归函数并保持变量本地
【发布时间】:2013-10-11 21:18:43
【问题描述】:

我尝试创建一个递归函数,但一个重要的变量(其他变量也是如此)被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.

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

【问题讨论】:

  • 也许你可以告诉我们哪个变量,这样我们就不必搜索它的代码;)
  • 您的问题不清楚。 desired 传递给您的递归调用。您可以通过在递归调用中传递您想要传递的任何内容来使其成为您想要的任何内容。
  • @Asped 我试试:var el = 0;而(元素[el]){ ... ... el++; };但这不会改变任何事情。
  • @jfriend00 想要的包含一个标签列表(数组),每次我调用函数时,我都会删除这个数组的第一个元素并将其传递给递归函数,但是当for循环继续时1、desired.tag已经为空...

标签: javascript loops recursion


【解决方案1】:

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

How to declare a static variable in Javascript

【讨论】:

  • 我第一次调用该函数时,它看起来像:parseChilds(elements, desired, array);元素包含两个标头(NodeList),期望包含标签,期望标签是一个数组=>“h1”,“span”,“b”。每次我调用 parseChilds Fn 时,我都会删除desired.tag 的第一个,但我只想在desired.tag 的最后一个实例上删除它,我不想影响/覆盖祖先desired.tag。我说清楚了吗?
猜你喜欢
  • 1970-01-01
  • 2020-02-11
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多