【发布时间】: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